我需要在eclipse上的文件上写字符串而不覆盖旧字符串。该函数类似于:创建一个字符串,将其保存在文件中,创建另一个字符串,将其保存在文件中,这有几个字符串。
字符串具有下一种格式:
String one = name surname surname; value1 value2 value3; code
所以方法将是:创建字符串,将其保存在文件中。创建另一个字符串,将其保存在文件中等。 然后在文件上保存所需的字符串数量后,我需要读取列出控制台上所有字符串的文件。
但是现在,我只能在文件中保存一个字符串,然后列出它。如果我保存两个字符串,第二个会覆盖第一个字符串,无论如何,它不正确,因为当我想列出它们时返回null值。
这是在文件中写入字符串的方法:
public void writeSelling(List<String> wordList) throws IOException {
fileOutPutStream = new FileOutputStream (file);
write= new ObjectOutputStream (fileOutPutStream);
for (String s : wordList){
write.writeObject(s);
}
write.close();
}
这就是我在主类上调用write方法的方法:
List<String> objectlist= new ArrayList<String>();
objectlist.add(product); //Product is the string I save each time
//which has the format I commented above
writeSelling(objectlist);
这是从文件中读取字符串的方法:
public ArrayList<Object> readSelling() throws Exception, FileNotFoundException, IOException {
ArrayList<Object> objectlist= new ArrayList<Object>();
fileInPutStream = new FileInputStream (file);
read= new ObjectInputStream (fileInPutStream);
for (int i=0; i<contador; i++){
objectlist.add(read.readObject());
}
read.close();
return objectlist;
}
这就是我在主类上调用read的方式:
ArrayList sellingobjects;
sellingobjects= readSelling();
for (Iterator it = sellingobjects.iterator(); it.hasNext();) {
String s = (String)it.next();
}
System.out.println(s.toString());
答案 0 :(得分:3)
您应该打开这样的文件,以便在文件中附加字符串
new FileOutputStream(file, true)
创建一个文件输出流以写入由。表示的文件 指定的File对象。如果第二个参数为true,则字节将为 被写到文件的末尾而不是开头。一个新的 创建FileDescriptor对象以表示此文件连接。
但Java序列化不支持“追加”。您无法将ObjectOutputStream
写入文件,然后在追加模式下再次打开该文件并向其写入另一个ObjectOutputStream
。你必须每次都重写整个文件。 (即,如果要将对象添加到文件中,则需要读取所有现有对象,然后使用所有旧对象再次写入文件,然后再写入新对象。)
我很想你使用DataOutputStream
public void writeSelling(List<String> wordList) throws IOException {
fileOutPutStream = new FileOutputStream (file,true);
DataOutputStream write =new DataOutputStream(fileOutPutStream);
for (String s : wordList){
d.writeUTF(s);
}
write.close();
}