Java - запись древовидной карты в текстовый файл

У меня есть древовидная карта под названием "sortMap", которая содержит некоторые ключи с соответствующими значениями. Я пытаюсь записать древовидную карту в текстовый файл следующим образом.

String aggFileName = "agg-"+String.valueOf("06.txt");
FileWriter fstream = new FileWriter(aggFileName);
BufferedWriter out = new BufferedWriter(fstream);

for (Map.Entry<String, String> entry : sortMap.entrySet()) {
     System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); //this statement prints out my keys and values
     out.write(entry.getKey() + "\t" + entry.getValue());
     System.out.println("Done");

Проблема, с которой я сталкиваюсь, заключается в том, что я получаю пустой файл, хотя операторы print в моем коде показывают, что я успешно перебираю древовидную карту. Что я могу делать не так?

1 ответ

Решение

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

Большинство объектов ввода-вывода имеют буфер, который является временным пространством для хранения любого значения, которое им записывается. Когда этот буфер очищается, они записывают свое содержимое в поток, с которым они работают. Ваш код должен быть следующим:

String aggFileName = "agg-"+String.valueOf("06.txt");
FileWriter fstream = new FileWriter(aggFileName);
BufferedWriter out = new BufferedWriter(fstream);

for (Map.Entry<String, String> entry : sortMap.entrySet()) {
     System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); //this statement prints out my keys and values
     out.write(entry.getKey() + "\t" + entry.getValue());
     System.out.println("Done");
     out.flush();   // Flush the buffer and write all changes to the disk
 }

out.close();    // Close the file
Другие вопросы по тегам