java - PrintWriter с FileWriter и BufferedWriter

Я здесь в своем уме.

Я пытаюсь напечатать несколько тысяч строк в файле, используя следующее:

        BufferedWriter bw = new BufferedWriter(new FileWriter(fileName, true));

        PrintWriter pw = new PrintWriter(bw, true);

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

Последние два часа меня озадачивает то, что около 85-90% строк записываются в файл, а ПЕРВЫЕ 10-15% - нет.

С логической точки зрения в коде нет ничего плохого, потому что, если я распечатаю его в консоли, будут распечатаны все строки.

Я что-то упустил?

Я делаю pw.close () только после того, как весь вывод будет напечатан.


person kkudi    schedule 13.06.2011    source источник
comment
Вы можете опубликовать еще немного кода? Можете ли вы попробовать pw.flush () - не уверен, что это изменит ситуацию,   -  person Sai    schedule 13.06.2011
comment
Мне ничего не кажется неправильным из вашего описания.   -  person MeBigFatGuy    schedule 13.06.2011
comment
@Sai, у него включен автопромыв.   -  person mre    schedule 13.06.2011
comment
Я пробовал pw.flush (), но это не сработало. Код длинный. Не знаю, как это поможет.   -  person kkudi    schedule 13.06.2011
comment
Не могу думать ни о чем другом, не глядя на код. Я предполагаю, что в коде нет исключений или ошибок.   -  person Sai    schedule 13.06.2011
comment
Я понял, что если я добавлю цикл for и напечатаю 2000 строк перед выводом, то получу весь вывод. Как будто есть какая-то граница, которую мне нужно пройти, прежде чем появится какой-либо текст.   -  person kkudi    schedule 13.06.2011


Ответы (2)


Возможно, вы захотите вызывать ручную команду .flush () после каждой записи в файл в коде, чтобы быть уверенным, что вы пишете правильно.

Это довольно озадачивает, напишите, если проблема не исчезнет.

Надеюсь, поможет!

Ура, Верн

person Vern    schedule 13.06.2011
comment
хм ... это у тебя странная проблема. Хотите поделиться какой ОС? Версия JDK? Версия целевой платформы? Ты используешь? Может быть, тут какие-то причуды или баг. Кроме того, поделитесь сегментом кода, с которым у вас возникли проблемы, чтобы на него могли взглянуть многие пары глаз? - person Vern; 13.06.2011
comment
java версии 1.6.0_16 Среда выполнения Java (TM) SE (сборка 1.6.0_16-b01) 64-разрядная серверная виртуальная машина Java HotSpot (TM) (сборка 14.2-b01, смешанный режим), Linux tui 2.6.28-15-generic # 52-Ubuntu SMP, среда, 9 сентября, 10:48:52 UTC, 2009 г. x86_64 GNU / Linux - person kkudi; 13.06.2011
comment
Мне нравится. Это примерно та же сборка, что и у меня, и у меня нет такой проблемы или ошибки, как вы сообщили. Хотите поделиться кодом, чтобы мы могли помочь? - person Vern; 13.06.2011

перед pw.close (), возможно, вам следует вызвать flush (), чтобы убедиться, что весь поток записан.

person Jasonw    schedule 13.06.2011
comment
Я уже пробовал pw.flush (). Я также установил autoFlush = true в конструкторе PrinterWriter - person kkudi; 13.06.2011
comment
чего я не понимаю, так это того, почему не записываются только первые 10%, а остальные записываются. В консоли печатаются первые 10%: / - person kkudi; 13.06.2011
comment
это кажется довольно странным, возможно, показать полный код? (java2s.com/Tutorial/Java/0180__File/) это скорее просто с кодом. - person Jasonw; 13.06.2011