将java数组存储到文件以进行读写
我是StackOverflow的新手,如果这个问题写得不正确,我很抱歉 我目前正在学习java,我正在寻找一种将数组集存储为文件的方法,以便在程序的不同实例之间保留对数组的更改。我需要读一个文件,将对最佳时间列表的任何更改写入文件 我对存储数组做了一些研究,但我读到的大部分内容似乎只存储字符串、整数等的简单数组。这些数组稍微复杂一点,所以我不知道怎么做。 我不希望有人为我写所有的代码,但我需要一些帮助来知道从哪里开始 这是需要存储的示例数据。这是java游戏的最佳时机 是否有方法将此类数据存储在某种文件中将java数组存储到文件以进行读写,java,arrays,file,Java,Arrays,File,我是StackOverflow的新手,如果这个问题写得不正确,我很抱歉 我目前正在学习java,我正在寻找一种将数组集存储为文件的方法,以便在程序的不同实例之间保留对数组的更改。我需要读一个文件,将对最佳时间列表的任何更改写入文件 我对存储数组做了一些研究,但我读到的大部分内容似乎只存储字符串、整数等的简单数组。这些数组稍微复杂一点,所以我不知道怎么做。 我不希望有人为我写所有的代码,但我需要一些帮助来知道从哪里开始 这是需要存储的示例数据。这是java游戏的最佳时机 是否有方法将此类数据存储在
public class BestTimes
{
BestTimes[] beginner = new BestTimes[10];
BestTimes[] intermediate = new BestTimes[10];
BestTimes[] expert = new BestTimes[10];
public BestTimes() {
beginner[0] = new BestTimes(1, "John", 10.5);
beginner[1] = new BestTimes(2, "James", 20.3);
beginner[2] = new BestTimes(3, "Jill", 30);
beginner[3] = new BestTimes(4, "Bill", 35);
beginner[4] = new BestTimes(5, "Kevin", 40);
beginner[5] = new BestTimes(6, "Nate", 55);
beginner[6] = new BestTimes(7, "Bob", 75);
beginner[7] = new BestTimes(8, "Dan", 85);
beginner[8] = new BestTimes(9, "Amy", 93);
beginner[9] = new BestTimes(10, "Jane", 100);
intermediate[0] = new BestTimes(1, "John", 110.5);
intermediate[1] = new BestTimes(2, "James", 120.3);
intermediate[2] = new BestTimes(3, "Jill", 130);
intermediate[3] = new BestTimes(4, "Bill", 135);
intermediate[4] = new BestTimes(5, "Kevin", 140);
intermediate[5] = new BestTimes(6, "Nate", 155);
intermediate[6] = new BestTimes(7, "Bob", 175);
intermediate[7] = new BestTimes(8, "Dan", 185);
intermediate[8] = new BestTimes(9, "Amy", 193);
intermediate[9] = new BestTimes(10, "Jane", 200);
expert[0] = new BestTimes(1, "John", 210.5);
expert[1] = new BestTimes(2, "James", 220.3);
expert[2] = new BestTimes(3, "Jill", 230);
expert[3] = new BestTimes(4, "Bill", 235);
expert[4] = new BestTimes(5, "Kevin", 240);
expert[5] = new BestTimes(6, "Nate", 255);
expert[6] = new BestTimes(7, "Bob", 275);
expert[7] = new BestTimes(8, "Dan", 285);
expert[8] = new BestTimes(9, "Amy", 293);
expert[9] = new BestTimes(10, "Jane", 300);
}
public int ranking;
public String playerName;
public double time;
public BestTimes(int r, String p, double t)
{
ranking = r;
playerName = p;
time = t;
}
}
最简单的方法是将数组序列化为JSON并存储它们的JSON表示
没有理由提出自己的序列化阵列解决方案,因为这已经是一个解决了的问题!我认为越简单越好。最简单的方法是将数组序列化为JSON并存储其JSON表示
没有理由提出自己的序列化阵列解决方案,因为这已经是一个解决了的问题!我认为越简单越好。我要么使用数据库,要么将内容导出为CSV(逗号分隔值)文件。您可以引入第四个属性,表示数据的
类型(初学者、专家等)
我要么使用数据库,要么将内容导出为CSV(逗号分隔值)文件。您可以引入第四个属性,表示数据的类型(初学者、专家等)
为了存储对象(数据结构),您需要对其进行序列化:将其转换为字节流、字符流等
序列化对象的方法有多种,从JSON到XML,再到XML
例如(如网页所述):
首先,必须在类定义的末尾添加implements Serializable
,以便:
public class BestTimes implements Serializable {
然后,您可以使用以下命令进行序列化:
try(FileOutputStream f = new FileOutputStream("file.txt");
ObjectOutput s = new ObjectOutputStream(f)) {
s.writeObject(beginner);
s.writeObject(intermediate);
s.writeObject(expert);
}
后来读成:
BestTimes[] beginner, intermediate, expert;
try(FileInputStream in = new FileInputStream("file.txt");
ObjectInputStream s = new ObjectInputStream(in)) {
beginner = (BestTimes[]) s.readObject();
intermediate = (BestTimes[]) s.readObject();
expert = (BestTimes[]) s.readObject();
}
对象序列化程序的简单之处在于,您不必自己定义格式。这是Java虚拟机的任务,而且它可以对所有类型的对象进行编码,而JSON不能处理包含循环的数据结构(例如:图形),XML也不能处理循环,CSV只适合于表内容
然而,缺点是数据结构是二进制编码的:它们不容易读取。尽管在这种情况下,这可能是一种优势,因为有些用户倾向于更改文件以提高他们的高分;) 为了存储对象(数据结构),您需要对其进行序列化:将其转换为字节流、字符流等等
序列化对象的方法有多种,从JSON到XML,再到XML
例如(如网页所述):
首先,必须在类定义的末尾添加implements Serializable
,以便:
public class BestTimes implements Serializable {
然后,您可以使用以下命令进行序列化:
try(FileOutputStream f = new FileOutputStream("file.txt");
ObjectOutput s = new ObjectOutputStream(f)) {
s.writeObject(beginner);
s.writeObject(intermediate);
s.writeObject(expert);
}
后来读成:
BestTimes[] beginner, intermediate, expert;
try(FileInputStream in = new FileInputStream("file.txt");
ObjectInputStream s = new ObjectInputStream(in)) {
beginner = (BestTimes[]) s.readObject();
intermediate = (BestTimes[]) s.readObject();
expert = (BestTimes[]) s.readObject();
}
对象序列化程序的简单之处在于,您不必自己定义格式。这是Java虚拟机的任务,而且它可以对所有类型的对象进行编码,而JSON不能处理包含循环的数据结构(例如:图形),XML也不能处理循环,CSV只适合于表内容
然而,缺点是数据结构是二进制编码的:它们不容易读取。尽管在这种情况下,这可能是一种优势,因为有些用户倾向于更改文件以提高他们的高分;) 正如其他人所说,使用一些JSON库将数据读/写到文件是一种有效的选择
如果您想要一种更纯粹的Java方法,您可以在实现接口的类中对数据进行建模,并使用Java的和来读/写数据。正如其他人所说,使用JSON库将数据读/写到文件是一种有效的选择
如果您想要一种更纯粹的Java方法,您可以在实现接口的类中对数据建模,并使用Java和进行读/写。您也可以将数据存储在csv文件中
代码
输出格式
id,name
1,Bruce
2,John
选中“也可以存储在csv文件中”
代码
输出格式
id,name
1,Bruce
2,John
检查@Byte仓鼠我认为没有什么比使用JSON库更容易的了,因为这使它成为一个单行程序。JSON的唯一问题是,当引用周期发生时,问题开始出现。为什么是JSON。为什么不把它们序列化?@Boristeider这是一个公平的观点,但我认为对于初学者来说,一些人类可读的东西比原始的东西更容易理解serialization@CommuSoft在他提供的数组示例中不会出现这种情况。@Byte仓鼠我认为没有什么比使用JSON库更容易的了,因为这使它成为一个单行程序。JSON的唯一问题是引用周期发生,问题开始出现。为什么是JSON。为什么不把它们序列化呢?@Boristeider这是一个公平的观点,但我认为对于初学者来说,一些人类可读的东西比原始的东西更容易理解serialization@CommuSoft他提供的数组示例不会出现这种情况。我大部分时间都在阅读和研究如何做到这一点。我还没有写多少代码。我知道如何将简单的文本放入文件,但这有很大的不同。我大部分时间都在阅读和研究如何做到这一点。我还没有写多少代码。我知道了如何将简单文本放入文件,但这有很大不同。这是个好主意。我认为这会使事情简化很多。谢谢