java - FileInputStream 和 OutputStream 无法在文件中读取和写入对象

标签 java file-io arraylist fileinputstream fileoutputstream

描述:

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

问题/问题:

我已经创建了所有相关的方法来写入和读取文件。但文件中似乎没有写入和读取任何对象。我主要关心的类是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;
    }
.........
.........

最佳答案

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 类中实现可序列化接口(interface)。当您要将对象写入文件时,您需要实现可序列化接口(interface),否则您将收到如下异常: java.io.NotSerializedException:com.collection.PersonInfo

关于java - FileInputStream 和 OutputStream 无法在文件中读取和写入对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29918367/

相关文章:

java - 仅删除两个 ArrayList 中重复值的第一个实例

java - 如何从 Java/Android 中的另一个类获取 ArrayList 中存储的数据?

java - 保存项目数据。你会怎么做?

java - 从 Firebase 中删除数据,但不是永久删除

Java.io : Performance Tuning

c - 使用 "$**"在 Makefile 中直接输入文件

java - 从 Java 中的字符串在内存中创建 File 对象

java - log4j xml 配置文件位于类路径之外

java - TestNG 无法打印阿拉伯字符

java - 全屏模式下的分隔线位置