我想將對象寫入文件和讀取他們讀書,但我發現了錯誤。 Main.java
中的51行是應該顯示對象的while循環。EOFException類,而與ObjectInputStream的
Exception in thread "main" java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2626)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1321)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
at com.sdajava.rwobj.Main.main(Main.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
我的代碼:先寫對象並讀取它們。數據寫入文件。
String fileName = "c://Users//lukas//obj.txt";
Person p1 = new Person("Jan", "Kowalski", 21);
Person p2 = new Person("Jan", "Kowalski", 21);
OutputStream fileOutputStream = null;
ObjectOutput objectOutputStream = null;
OutputStream bufferOut = null;
try {
fileOutputStream = new FileOutputStream(fileName);
bufferOut = new BufferedOutputStream(fileOutputStream);
objectOutputStream = new ObjectOutputStream(bufferOut);
objectOutputStream.writeObject(p1);
objectOutputStream.writeObject(p2);
objectOutputStream.close();
} finally {
if (objectOutputStream != null) {
objectOutputStream.close();
}
fileOutputStream.close();
bufferOut.close();
objectOutputStream.close();
}
try {
FileInputStream fileInputStream = new FileInputStream(fileName);
InputStream bufferIn = new BufferedInputStream(fileInputStream);
ObjectInputStream objectInputStream
= new ObjectInputStream(bufferIn);
Person readCase = null;
List<Person> recordList = new ArrayList<>();
do {
readCase = (Person) objectInputStream.readObject();
if (readCase != null) {
recordList.add(readCase);
}
} while (readCase != null);
fileOutputStream.close();
objectOutputStream.close();
} catch (FileNotFoundException err){
err.printStackTrace();
}
出了什麼問題?
好了,你只寫一個對象,但你讀不止一個,所以試圖讀取第二個對象,當你得到一個EOFException類,如記錄。請注意,您不需要關閉所有流。只有最外面的一個。使用試用資源。 –
當我添加兩個對象錯誤STIL存在。我更新了我的代碼。 – lukassz
因爲你的循環嘗試閱讀3.也就是說,它讀取,直到它得到空,但永遠不會發生,因爲的readObject()不會在文件的結尾返回null。它引發一個異常。 –