使用ObjectOutputStream写入文件而不覆盖旧数据

时间:2013-11-28 09:17:52

标签: java string serialization fileinputstream fileoutputstream

我需要在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());

1 个答案:

答案 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();
}