gpt4 book ai didi

java - 在文件中保存和加载列表

转载 作者:行者123 更新时间:2023-12-02 01:25:36 26 4
gpt4 key购买 nike

我目前正在准备考试并正在完成以下任务:

如何将 ArrayList 传递给存储列表数据的“保存”方法以及将数据传回的另一个“加载”方法?

class Person {
private String firstname;
private String lastname;
private String sortname;

public Person(String firstname, String lastname) {
this.firstname = firstname;
this.lastname = lastname;
updateSortname();

//getter 和 setter..

根据任务我应该使用这些方法:

public static List<Person> load(String filename) throws IOException {
return ??;
}


public static Person load(DataInputStream in) throws IOException {
return ??;
}


public static void save(String filename, List<Person> list) throws IOException {
}


public static void save(DataOutputStream out, Person person) throws IOException {
}


public static List<Person> unserialize(String filename) throws IOException, ClassNotFoundException {
return ??;
}


public static void serialize(String filename, List<Person> persons) throws IOException {
}

这是应产生以下输出的主要方法:

[Willy Wonka (WonkaWilly), Charlie Bucket (BucketCharlie), Grandpa Joe (JoeGrandpa)]

[Willy Wonka (WonkaWilly), Charlie Bucket (BucketCharlie), Grandpa Joe (JoeGrandpa)]

[Willy Wonka (WonkaWilly), Charlie Bucket (BucketCharlie), Grandpa Joe (JoeGrandpa)]

public class PersonTest {

public static void main(String[] args) throws IOException, ClassNotFoundException {
List<Person> persons = new ArrayList<>();
persons.add(new Person("Willy", "Wonka"));
persons.add(new Person("Charlie", "Bucket"));
persons.add(new Person("Grandpa", "Joe"));
System.out.println(persons);

Person.save("persons.sav", persons);
persons = Person.load("persons.sav");
System.out.println(persons);
Person.serialize("persons.ser", persons);
persons = Person.unserialize("persons.ser");
System.out.println(persons);
}

}

它应该看起来像这样。但我不知道如何为 ArrayList 做到这一点。

public static void save(String filename , Graph graph ) throws IOException{

try (ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream (new FileOutputStream (filename)))) {
out.writeObject (graph);
}
}

public static Graph load (String filename) throws IOException, ClassNotFoundException {

Graph graph = null;
try (ObjectInputStream in = new ObjectInputStream (new BufferedInputStream ( new FileInputStream (filename)))) {
graph = (Graph) in.readObject();
}
return graph;
}

最佳答案

由于您需要将 Person 对象输出为 as,我们需要重写 Person 类的 toString()

[Willy Wonka (WonkaWilly), Charlie Bucket (BucketCharlie), Grandpa Joe (JoeGrandpa)]

class Person {

//Respective Constructor, Getter & Setter methods


/* Returns the string representation of Person Class.
* The format of string is firstName lastName (lastNameFirstName)*/

@Override
public String toString() {
return String.format(firstName + " " + lastName + "("+ lastName + firstName + ")");
}
}

将对象写入文件的方法有很多。这是 PrintWriter

将对象保存到文件

public static void save(String filename, List<Person> list) throws IOException {
PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
for (Person person : list) {
pw.println(person.toString());
}
pw.close();
}

或使用序列化

//您可以使用序列化机制。要使用它,您需要执行以下操作:

  1. Person 类声明为实现 Serialized:

    public class Person implements Serializable {
    ...
    @Override
    public String toString() {
    return String.format(firstName + " " + lastName + "("+ lastName + firstName + ")");
    }
    }
  2. 将列表写入文件:

    public static void save(String filename, List<Person> list) throws IOException {
    FileOutputStream fos = new FileOutputStream(filename);
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(list);
    oos.close();
    }
  3. 从文件中读取列表:

    public static List<Person> load(String filename) throws IOException {
    FileInputStream fis = new FileInputStream(filename);
    ObjectInputStream ois = new ObjectInputStream(fis);
    List<Person> list = (List<Person>) ois.readObject();
    ois.close();
    return list;
    }

关于java - 在文件中保存和加载列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56986030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com