将java数组存储到文件以进行读写

将java数组存储到文件以进行读写,java,arrays,file,Java,Arrays,File,我是StackOverflow的新手,如果这个问题写得不正确,我很抱歉 我目前正在学习java,我正在寻找一种将数组集存储为文件的方法,以便在程序的不同实例之间保留对数组的更改。我需要读一个文件,将对最佳时间列表的任何更改写入文件 我对存储数组做了一些研究,但我读到的大部分内容似乎只存储字符串、整数等的简单数组。这些数组稍微复杂一点,所以我不知道怎么做。 我不希望有人为我写所有的代码,但我需要一些帮助来知道从哪里开始 这是需要存储的示例数据。这是java游戏的最佳时机 是否有方法将此类数据存储在

我是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他提供的数组示例不会出现这种情况。我大部分时间都在阅读和研究如何做到这一点。我还没有写多少代码。我知道如何将简单的文本放入文件,但这有很大的不同。我大部分时间都在阅读和研究如何做到这一点。我还没有写多少代码。我知道了如何将简单文本放入文件,但这有很大不同。这是个好主意。我认为这会使事情简化很多。谢谢