我注意到,无论何时使用FileOutputStream
并将其追加为true,附加的对象都会放在不同的行上。
我的问题是你如何用ObjectInputStream
读取多行数据。
例如:
public class StringBytes {
public static void main(String[] args) throws Exception {
String S1 = "Hi";
String S2 = "\n"+"Bye";
String file = "C:\\HiBye.out";
FileOutputStream fileOutputStream = new FileOutputStream(file);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(S1);
fileOutputStream = new FileOutputStream(file,true);
objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(S2);
FileInputStream fileInputStream = new FileInputStream(file);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
String SS = (String) objectInputStream.readObject();
System.out.println(SS);
}
}
上面的输出是Hi
,因为Bye
在不同的行上,它不被读取。我仍然是一个初学者,所以所有的帮助表示赞赏
您在文件中写入了两个对象(String实例):s1和s2。你只读了一个对象,第一个。
如果您希望将它视为单个String,则需要s1为“Hey”+ \ n +“Bye”。或者,您可以两次调用readObject()
,并获取第二个对象
使用ObjectOutputStream
和ObjectInputStream
,所有内容都以二进制格式存储在文件中,因此查看该文件不会给您太多信息。
您放入文件的内容以及之后输入流的内容是单个对象。要获得两个String
s你需要两次调用readObject()
,一次为你最初的每个writeObject()
。
如果你想使用文本文件,你可以看看BufferedReader
和BufferedWriter
。如果您有兴趣一次阅读整个文本文件,请查看What is simplest way to read a file into String?。