#java #io
#java #io
Вопрос:
Я пытаюсь сбросить большой целочисленный массив (10 000 элементов) в текстовый файл, но сталкиваюсь с некоторыми проблемами. Я пробовал два разных подхода, и ни один из них, похоже, не работает. Ниже приведена функция, которую я написал:
private static void writeToFile(String name, int[] a){
try {
FileWriter fw = new FileWriter(name);
BufferedWriter bw = new BufferedWriter(fw);
bw.write("working");
for (int n: a){
bw.write(n " ");
}
bw.close();
} catch (IOException e) {
System.err.print("Unable to write to file " name ".");
e.printStackTrace();
}
}
Первое, что я попробовал, это создать строку в цикле for, а затем записать всю строку в файл. Ни один из методов не работает и не дает мне те же результаты, что и следующие:
- Файл создается, но остается пустым
- Отлично работает для более коротких массивов (~ 10 элементов)
- Отлично работает, если пробел представляет собой букву, например: bw.write(n «a»)
Есть идеи, что я делаю не так? Или есть еще более простой способ, который я не вижу?
Спасибо,
Civatrix
Комментарии:
1. Что, если вы используете:
bw.write(String.valueOf(n) " ");
?2. Закрываете ли вы объекты BufferedWriter и FileWriter по завершении цикла? Вы пытались вызвать метод flush?
3. В этом нет ничего плохого. Вы пишете файл с одной очень длинной строкой, и ваш редактор не отображает его должным образом.
4. Поддерживаю комментарий @Gabe. Сгенерированный файл хорошо выглядит в vim и notepad, но очень странно в Eclipse (он знает, что существует 48 тысяч столбцов, но не отображает их)
5. Попробуйте использовать PrintWriter и выведите номера отдельных строк.
Ответ №1:
Можете ли вы объяснить, как вы просматриваете / читаете файл после этого? Ваш код в основном в порядке, насколько я могу видеть (панель перемещает close() в блок finally), и действительно не должно иметь никакого значения, добавляется ли пробел или другая буква. Но это может иметь значение, например, для текстового редактора, я полагаю …?
Комментарии:
1. Открытие сгенерированного текстового файла в notepad.exe показывает содержимое, в то время как текстовый редактор eclipse показывает только некоторые из последних его частей. Я отлаживал этот фрагмент кода уже полчаса, и это было так просто (или, по крайней мере, это сработало для меня, но я не тот, у кого настоящая проблема).
2. Помните, что это будет одна ОЧЕНЬ длинная строка — как это будет выглядеть, будет зависеть от того, с чем вы ее открываете…
3. Хорошо, что в конечном итоге вы хотите сделать с этим файлом? Вас особенно волнует, что в каком-то конкретном текстовом редакторе есть ошибка, которая означает, что она не отображается должным образом? (Если вам не все равно, то решение, на которое намекнул Джон Пит, может заключаться в том, чтобы поместить новую строку после каждого числа.)
4. Кажется, это работает во всем, кроме встроенного редактора eclipse, который, вероятно, единственное, что никогда не откроет его, поэтому я думаю, что я хорош. Спасибо, ребята.
Ответ №2:
Этот код запишет все элементы a[]
в файл, за которым следует пробел, если только не получит исключение. Однако он не будет записывать никаких строк.Это ваша проблема? Если это так, вам нужно bw.newLine()
после каждого write()
.