1

Мне нужно написать строки в файле на eclipse без перезаписи старых строк. Функция будет примерно такой: создать строку, сохранить ее в файле, создать другую строку, сохранить ее в файле, используя несколько строк.Запись в файл с использованием ObjectOutputStream без перезаписи старых данных

Струны имеют следующий формат:

String one = name surname surname; value1 value2 value3; code 

Так метод будет: создать строку, сохранить его в файле. Создайте еще одну строку, сохраните ее в файле и т. Д. Затем, после сохранения требуемого количества строк в файле, мне нужно будет прочитать файл, в котором перечислены все строки на консоли.

Но на данный момент я могу сохранить только одну строку в файле, а затем перечислить ее. Если я сохраню две строки, второй перезапишет первый, и в любом случае, это не так, потому что возвращает мне нулевое значение, когда я хочу их перечислить.

Это метод, который пишет строку в файле:

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

Это, как я вызов метода записи на главном классе:

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; 
} 

И это, как я вызов прочитать на главном классе:

ArrayList sellingobjects; 
sellingobjects= readSelling(); 
for (Iterator it = sellingobjects.iterator(); it.hasNext();) { 
     String s = (String)it.next(); 
} 
System.out.println(s.toString()); 
+1

Не говори мне, что ты гугл «Java записи в конце файла», я бы не поверил вам. – Julien

+0

http://stackoverflow.com/questions/8544771/how-to-write-data-with-fileoutputstream-without-losing-old-data – TheStackHasGrownIntoTheHeap

+0

Я попробовал написание в конце файла, но затем не прочитайте строку справа. Я начинаю с java, извините, если вам легко.Я не понимаю, почему голосом, если это предположение будет местом, где люди задают его сомнения и узнают – masmic

ответ

2

Вы должны открыть файл, как это для добавления строки в файле

new FileOutputStream(file, true) 

Создает файл выходной поток для записи в файл, представленный указанным файлом . Если второй аргумент равен true, то байты будут быть записаны в конец файла, а не в начале. Для представления этого подключения к файлу создается новый объект FileDescriptor.

Но сериализация Java не поддерживает «добавление». вы не можете записать ObjectOutputStream в файл, а затем снова открыть файл в режиме добавления и записать еще ObjectOutputStream. вы должны каждый раз переписывать весь файл. (т. е. если вы хотите добавить объекты в файл, вам необходимо прочитать все существующие объекты, а затем снова записать файл со всеми старыми объектами, а затем с новыми объектами).

Я бы sugest использовать 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(); 
} 
+0

Я пробовал с этим, но не читал новую строку, которую я написал, читает строку, которая была там раньше. Должен ли я сделать то же самое с «новым FileInputStream (file, true)»? – masmic

+0

@ masmic_87 Нет, вы не можете этого сделать. –

+0

Хорошо, даже если я помещаю 'true' там, он не пишет/читает правильно, если я пишу одну строку, читает ту, что у меня была до этого, и новую. Если я напишу второй, это будет выглядеть следующим образом: «Ошибка чтения файла недопустимый код типа: AC' – masmic

Смежные вопросы