Как добавить данные в файл с помощью BufferedWriter и FileOutPutStream

В приведенном ниже коде я пытаюсь добавить некоторый текст в файл, используя FileOutputStream и BufferedWriter, как показано ниже. В настоящее время, несмотря на то, что в файле есть некоторые данные, когда я использую FileOutputStream и BufferedWriter, я обнаружил, что файл пуст, и даже данные, которые я хотите добавить bw.write("new information"); не существует, файл полностью пуст.

Пожалуйста, дайте мне знать, как это исправить.

Код:

File f = new File(SystemConfig.getSystConfigInstance("E"));
    System.out.println(f.getAbsolutePath() + " name: " + f.getName());

    OutputStream os = new FileOutputStream(f);
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
    bw.write("new information");

person rmaik    schedule 15.12.2014    source источник
comment
было бы хорошо вызвать bw.flush() после записи, если вы хотите сразу увидеть эффект   -  person Adem    schedule 15.12.2014
comment
@Adem, не могли бы вы дать краткое объяснение флеша?   -  person rmaik    schedule 15.12.2014
comment
потоки в основном имеют некоторый буфер. когда вы записываете на них какие-то данные, они сначала сохраняют эти данные, пока их буфер не заполнится. после этого они начали писать. вы можете форсировать это, вызвав flush(), который записывает текущие данные буфера в место назначения   -  person Adem    schedule 15.12.2014


Ответы (3)


Попробуйте это, FileOutputStream(файл файла, логическое добавление) с добавлением

OutputStream os = new FileOutputStream(f, true);

Если логическое значение append равно true, это означает, что новое содержимое будет добавлено к старому содержимому.

вместо

OutputStream os = new FileOutputStream(f);

FileOutputStream также имеет метод добавления по умолчанию. Так что используйте это, чтобы добавить содержимое к старому.

person newuser    schedule 15.12.2014
comment
пожалуйста, для чего нужен второй логический параметр? - person rmaik; 15.12.2014
comment
Это флаг для добавления, поэтому, если для него установлено значение «истина», новый текст будет добавлен в существующий файл, если для него установлено значение «ложь», старое содержимое будет удалено перед записью в файл. - person Phiwa; 15.12.2014

    File f = new File(SystemConfig.getSystConfigInstance("E"));;
    System.out.println(f.getAbsolutePath() + " name: " + f.getName());

    OutputStream os = new FileOutputStream(f,true);
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
    bw.write("new information");    
    bw.close();

Вы пропустили флаг добавления для FileOutputStream. Потом только он создавался как appendable. В противном случае ему понравится только чтение.

Далее, в конце файла нужно закрыть писатель. Так что только он будет сбрасывать все данные.

person Siva Kumar    schedule 15.12.2014

Попробуйте это (обратите внимание на логическое значение, переданное FileOutputStream):

File f = new File(SystemConfig.getSystConfigInstance("E"));
System.out.println(f.getAbsolutePath() + " name: " + f.getName());

OutputStream os = new FileOutputStream(f, true);  // <--- append = true
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
bw.write("new information");

Для получения дополнительной информации прочитайте официальный документ от FileOutputStream. :

FileOutputStream (Файловый файл, логическое добавление)

Если второй аргумент верен, то байты будут записаны в конец файла, а не в начало.

person Alex Gidan    schedule 15.12.2014