java - 如何从文本文件读取到对象数组

标签 java io

所以我查看了几个解决方案,但没有一个适合我。 感谢一些人,我最终得到了无限循环,但它仍然对我不起作用。 我想将文件“output.txt”读入对象列表。 所以我提供了剩余的代码,因为我认为它们根本没有帮助......

try {
            List<House> listH = new ArrayList<>();
            boolean cont = true;
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("output.txt"));
            while(cont)
            {
                House house = (House) ois.readObject();
                if(house != null)
                    listH.add(house);
                else
                    cont = false;
            }
            ois.close();
            mainmenu();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }

编写代码:

try {
            FileWriter writer = new FileWriter("output.txt");
            for(House str : listH)
            {
                writer.write(String.valueOf(str) + "\n");
            }
            writer.close();
            System.out.println("Successful writing");
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("Couldn't write");
        }

房子对象:

public class House {
    String address;
    double area;
    boolean garage;

    public House(String address, double area, boolean garage){
        this.address=address;
        this.area = area;
        this.garage = garage;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public double getArea() {
        return area;
    }

    public void setArea(double area) {
        this.area = area;
    }

    public boolean isGarage() {
        return garage;
    }

    public void setGarage(boolean garage) {
        this.garage = garage;
    }

    @Override
    public String toString() {
        return address + ";" + area + ";" + garage;
    }
}

错误消息如下:

java.io.StreamCorruptedException: invalid stream header: 3134313B at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:866) at java.io.ObjectInputStream.(ObjectInputStream.java:358)

最佳答案

您面临三个主要问题:

  1. 您的 while 循环是无限的,可能会导致堆栈溢出 错误,使条件检查是否还有另一行/对象 在继续之前先在文件中读取。
  2. 读取文件的代码直接转换为 House 对象,这 高度依赖于文件写入的格式,任何错误都会导致 读取失败。
  3. 检查 house 是否为 null 的条件的 else 部分发生了变化 整个阅读过程的一部分,所以如果任何一个都存在一个空房子 原因是后面的所有房子都不会被读取 对于更具体的答案,我可能需要 House 类结构和用于创建输出文件的过程。否则,在 while 条件中使用 hasnextreadline 来“手动”构造一个来自字符串值的 house 对象。

关于java - 如何从文本文件读取到对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56513661/

相关文章:

java - 使用 Spring Security LDAP 禁用基本身份验证

Java虚拟对象

c - 逐行读取文件并捕获该行的字

java - 要从 Java 中的 DataInputStream 读取的未知缓冲区大小

java - 当我只更改复制的数组时,为什么我的原始数组会更改?

带有引用库的Java程序: NoClassDefFound

java - 在 ThreadPoolExecutor 中测试 RejectedExecutionHandler

java - 何时刷新 BufferedWriter

C# 异步/等待 I/O 绑定(bind)与 CPU 绑定(bind)操作

c - 从C语言的文本文件中读取格式化数据