FileInputStream 和 OutputStream 不能读写对象到文件

FileInputStream and OutputStream can't read and write objects into file

描述:

在我的程序中,要求用户输入一些值。这些值存储到 ArrayList 中,以便我可以将它们打印出来。现在这个问题是一旦我终止程序,所有数据都会丢失。这就是为什么我决定将这些 arrayList 对象存储到文件中并从那里读取它们的原因。

PROBLEM/QUESTION:

我已经创建了所有相关的写入和读取文件的方法。但是在file.The class里面好像没有写入和读取对象,我主要关注的是ReadWrite.

工作代码:

读写:

    public void writeFile(List<PersonInfo> information) {

    try {
        FileOutputStream fos = new FileOutputStream("C:\Users\Documents\NetBeansProjects\BankFile4.txt");
        ObjectOutputStream os = new ObjectOutputStream(fos);
        os.writeObject(information);
        os.flush();
        fos.close();
        os.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

public List<PersonInfo> readFile() {
    List<PersonInfo> dataFromFile=null;
    try {

        FileInputStream fis = new FileInputStream("C:\Users\Documents\NetBeansProjects\BankFile4.txt");
        ObjectInputStream is = new ObjectInputStream(fis);
        dataFromFile=(List<PersonInfo>)is.readObject();
        fis.close();
        is.close();
        //return readFile();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return dataFromFile;
    }

个人简介:

Scanner input = new Scanner(System.in);
            List<PersonInfo> info = new ArrayList<PersonInfo>();
            List<PersonInfo> info2 = new ArrayList<PersonInfo>();
            ReadWrite rw=new ReadWrite();
            rw.writeFile(info);
            info2=rw.readFile();
            while (true) {
                System.out.println("\n");
                System.out.println("1. Input personal info\n"
                        + "2. Print them out\n"

                        + "*************"
                        + "*************");
                option1 = input.nextInt();
                input.nextLine();
                switch (option1) {
                    case 1:
                        PersonInfo personInfo = new PersonInfo();
                        //take the input
                        System.out.println("Enter a name: ");
                        personInfo.setName(input.nextLine());

                        System.out.println("Give ID: ");
                        personInfo.setId(input.nextInt());
                        System.out.println("Input credit: ");
                        personInfo.setCredit(input.nextDouble());
                        //addint them up
                        info.add(personInfo);
                        break;
                    case 2:
                        //display them 
                        System.out.println("");
                        System.out.println("Name\t\tID\t\tCredit");
                        for (PersonInfo pInfo : info) {
                            System.out.println(pInfo);
                        }
                        System.out.println("\t\t.............\n"
                                + "\t\t.............");
                        break;

        }

            }

个人信息:

........
........
public PersonInfo() {
        this.name = null;
        this.id = 0;
        this.credit = 0;
    }

    public void setName(String name) {
        this.name = name;
    }
.........
.........
  • 第一个 PersonInfo 应该实现 SerialiZable,
  • 我不确定,但 PersonInfo 也应该有一个默认构造函数
package com.collection;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


class PersonInfo implements Serializable{
    private String name;
    private int id;
    private double credit;
    public PersonInfo(){}
    public PersonInfo(String name,int id,int credit)
    {
        this.name=name;
        this.id=id;
        this.credit=credit;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public double getCredit() {
        return credit;
    }
    public void setCredit(double credit) {
        this.credit = credit;
    }

}
class ReadWrite
{
       public void writeFile(List<PersonInfo> information){

            try {
                FileOutputStream fos = new FileOutputStream("/home/mohammad.sadik/TestReadWrite.txt");
                ObjectOutputStream os = new ObjectOutputStream(fos);
                os.writeObject(information);
                os.flush();
                fos.close();
                os.close();

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public List<PersonInfo> readFile() {
            List<PersonInfo> dataFromFile=null;
            try {

                FileInputStream fis = new FileInputStream("/home/mohammad.sadik/TestReadWrite.txt");
                ObjectInputStream is = new ObjectInputStream(fis);
                dataFromFile=(List<PersonInfo>)is.readObject();
                fis.close();
                is.close();
                //return readFile();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return dataFromFile;
            }
}
public class AboutPerson {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        List<PersonInfo> info = new ArrayList<PersonInfo>();
        List<PersonInfo> info2 = new ArrayList<PersonInfo>();
        ReadWrite rw=new ReadWrite();
        while (true) {
            System.out.println("\n");
            System.out.println("1. Input personal info\n"
                    + "2. Print them out\n"

                    + "*************"
                    + "*************");
           int option1 = input.nextInt();
            input.nextLine();
            switch (option1) {
                case 1:
                    PersonInfo personInfo = new PersonInfo();
                    //take the input
                    System.out.println("Enter a name: ");
                    personInfo.setName(input.nextLine());
                    System.out.println("Give ID: ");
                    personInfo.setId(input.nextInt());
                    System.out.println("Input credit: ");
                    personInfo.setCredit(input.nextDouble());
                    //addint them up
                    info.add(personInfo);
                    rw.writeFile(info);
                    break;
                case 2:
                    //display them 
                    info2=rw.readFile();
                    System.out.println("");
                    System.out.println("Name\t\tID\t\tCredit");
                    for (PersonInfo pinfo : info2) {
                        System.out.println(pinfo.getName()+"\t\t"+pinfo.getId()+"\t\t"+pinfo.getCredit());
                    }
                    System.out.println("\t\t.............\n"
                            + "\t\t.............");
                    break;

    }

        }
    }
}

请在 PersonInf 中实现可序列化接口 class.When 你要将对象写入文件然后你需要实现可序列化接口否则你将得到这样的异常: java.io.NotSerializableException: com.collection.PersonInfo