所以我有一个非常奇怪的错误,我将我的对象放入数组列表中,将它们写出来以查看所有内容是否都在那里,所有内容都检查完毕,我将它们写到一个文件中,当我打开文件时,所有内容都在那里,但是当我继续阅读它们时,一些对象由于未知的原因而没有被读取,就像文件中不存在该条目一样,但我可以在文件中看到它们在那里。有人知道我失踪了吗?
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
public class ReadWriteTD {
public static void write(ArrayList<Tokendata> list) {
try {
FileOutputStream f = new FileOutputStream(new File("src/resources/TokenProfiles"));
ObjectOutputStream o = new ObjectOutputStream(f);
// Write objects to file
list.forEach(a -> {
try {
o.writeObject(a);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
});
o.close();
f.close();
} catch (FileNotFoundException e) {
System.out.println("File not found");
} catch (IOException e) {
System.out.println("Error initializing stream");
}
}
public static ArrayList<Tokendata> read() {
ArrayList<Tokendata> list = new ArrayList<Tokendata>();
try {
FileInputStream fi = new FileInputStream(new File("src/resources/TokenProfiles"));
ObjectInputStream oi = new ObjectInputStream(fi);
Boolean cond = true;
while(cond){
if(oi.readObject() != null)
list.add((Tokendata) oi.readObject());
else cond=false;
}
oi.close();
fi.close();
}catch(Exception e){
}
//list.forEach(a -> System.out.print(a.toString()));
return list;
}
}
最佳答案
这就是问题:
if(oi.readObject() != null)
list.add((Tokendata) oi.readObject());
每次迭代都会调用 readObject()
两次。除了检查第一次调用的结果是否为空之外,将忽略第一次调用的结果。你只想要这样的东西:
Object obj;
while ((obj = oi.readObject()) != null) {
list.add((Tokendata) obj);
}
不需要 cond
变量,现在每次迭代只需调用 readObject
一次。
关于Java没有从文件中读取所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53207977/