簡體   English   中英

如何從文本文件讀取到對象數組

[英]How to read from text file into array of Objects

因此,我查看了幾個解決方案,但沒有一個對我有用。 感謝某些人,我最終獲得了無限循環,但對我來說仍然無效。 我想將文件“ 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:無效的流標頭:java.io.ObjectInputStream。(ObjectInputStream.java:358)上的java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:866)處為3134313B

您有三個主要問題:

  1. 您的while循環是無限的,可能會導致stackoverflow錯誤,請在繼續執行條件之前檢查文件中是否有其他行/對象要讀取。
  2. 讀取文件的代碼直接投射到House對象,這在很大程度上取決於文件寫入的格式,任何錯誤都將導致讀取失敗。
  3. 條件檢查的其他部分將檢查是否為空,這將打破整個閱讀過程,因此,如果由於某種原因而存在一個空房子,則將無法讀取之后的所有房子。為獲得更具體的答案,我可能需要房屋類結構和用於創建輸出文件的過程, hasnext在while條件和readline使用hasnext從字符串值``手動''構造一個house對象。

這里:

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("output.txt"));

本身就是一個矛盾。 您會看到,當通過標准Java機制序列化 Java對象時,最終會得到bytes 二進制數據。

從而:

  • 您的文件擴展名錯誤(並且是二進制文件,不是文本),或者:
  • 該文件中的任何內容……都不是二進制數據。

該例外意味着第二種情況更有可能發生。

換句話說:驗證該“ output.txt”文件中的真正內容。 顯然,這不是序列化Java對象的結果。

(注意:當然,文件擴展名無關緊要,但這意味着文件確實與您期望的有所不同)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM