为了账号安全,请及时绑定邮箱和手机立即绑定

在文件中保存和加载列表

在文件中保存和加载列表

沧海一幻觉 2023-03-17 16:07:27
我目前正在准备考试并正在执行以下任务:如何将 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 {}这是应该产生以下输出的主要方法:[威利·旺卡(WonkaWilly)、查理·巴克特(BucketCharlie)、乔爷爷(JoeGrandpa)][威利·旺卡(WonkaWilly)、查理·巴克特(BucketCharlie)、乔爷爷(JoeGrandpa)][威利·旺卡(WonkaWilly)、查理·巴克特(BucketCharlie)、乔爷爷(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);}}它应该看起来像这样。但我不知道如何为 ArrayLists 做这件事。public static void save(String filename , Graph graph ) throws IOException{try (ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream (new FileOutputStream (filename)))) {out.writeObject (graph);}}
查看完整描述

2 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

由于您需要Person对象的输出,因此我们需要重写toString()类Person。


[威利·旺卡(WonkaWilly)、查理·巴克特(BucketCharlie)、乔爷爷(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();

}

或者使用序列化


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


将Person类声明为实现Serializable:


public class Person implements Serializable {

    ...

  @Override

  public String toString() { 

     return String.format(firstName + " " + lastName + "("+ lastName + firstName + ")"); 

  } 

}

将您的列表写入文件:


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();

}

从文件中读取列表:


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;

}


查看完整回答
反对 回复 2023-03-17
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

你可以尝试这样的事情:


public static void save(String filename , ArrayList<Person> persons) throws IOException{


    try (ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream (new FileOutputStream (filename)))) {

        for(int i = 0; i < persons.size; i++){

               out.writeObject(persons.get(i));

        }   

}

}


查看完整回答
反对 回复 2023-03-17
  • 2 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信