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