Запись длинной строки в Java в файл

#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, а затем записать всю строку в файл. Ни один из методов не работает и не дает мне те же результаты, что и следующие:

  1. Файл создается, но остается пустым
  2. Отлично работает для более коротких массивов (~ 10 элементов)
  3. Отлично работает, если пробел представляет собой букву, например: 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() .