Добавление информации в текстовый файл — проблема с курсором

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

Теперь вот моя проблема: в первый раз, когда я пытаюсь что-то добавить в текстовый файл, он создает пустую строку, и под ней будет информация, добавленная пользователем, причина этого в том, что когда Java открывает мой файл, Курсор ввода находится внизу последней строки, где нет пробела, и он готов к вводу информации, например:

введите здесь описание изображения

Хорошо, круто, так что это означает, что всякий раз, когда я добавляю что-нибудь в txt-файл из моей программы на Java, это автоматически будет на новой строке, и мне не нужно будет добавлять пробелы println для ввода новой строки. Теперь здесь возникает другая проблема: после того, как Java помещает новый текст в txt-файл, он оставляет курсор ввода в КОНЦЕ добавленной новой строки, а не в новой строке под ней, где нет данных. Это означает, что если я попытаюсь дважды добавить новую информацию, она появится в той же строке, а не в новой. Поэтому, чтобы исправить это, я просто добавил

pw.println();

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

введите описание изображения здесьТеперь всякий раз, когда пользователь хочет выполнить поиск по базе данных, потому что у меня есть нулевые проверки в моих поисках , всякий раз, когда программа сталкивается с этой пустой строкой между моими исходными данными и новыми данными, которые были добавлены, она не будет продолжать поиск, поэтому любая информация, которую пользователь добавил в базу данных, становится бесполезной, и Java не сможет искать его из-за пустой строки, которая его разделяет.

По сути, либо я сохраняю pw.println(), и все мои данные появляются, но между исходными данными есть пробел, поэтому его нельзя найти, ИЛИ я могу удалить его, а затем все новые добавленные данные появляются на та же самая линия, которая не то, что я хочу.

Это код для добавления данных в txt файл:

    public static void add() throws IOException
{
    String filename="Elements.txt";
    PrintWriter pw = new PrintWriter(new FileWriter(filename,true));
    pw.println();
    String element=JOptionPane.showInputDialog(null, "Enter name of element.", "Add an Element", JOptionPane.INFORMATION_MESSAGE);;
    pw.write(element + ",");

    String symbol=JOptionPane.showInputDialog(null, "Enter symbol of element.", "Add an Element", JOptionPane.INFORMATION_MESSAGE);;
    pw.write(symbol + ",");

    String atomicNumber=JOptionPane.showInputDialog(null, "Enter atomic number.", "Add an Element", JOptionPane.INFORMATION_MESSAGE);;
    pw.write(atomicNumber + ",");

    String atomicMass=JOptionPane.showInputDialog(null, "Enter atomic mass", "Add an Element", JOptionPane.INFORMATION_MESSAGE);;
    pw.write(atomicMass + ",");

    String valence=JOptionPane.showInputDialog(null, "Enter # of valence electrons.", "Add an Element", JOptionPane.INFORMATION_MESSAGE);;
    pw.write(valence);

    pw.close();

}

Есть ли способ манипулировать курсором в текстовом файле, чтобы убедиться, что все новые добавленные данные отображаются правильно, чтобы пользователь мог их искать впоследствии? Открытие текстового файла и размещение курсора там, где я хочу, не сработало.


person W. Ahmed    schedule 10.01.2015    source источник


Ответы (1)


Идея состоит в том, чтобы выполнить println() (которая добавляет конец строки) в конец записи того, что должно быть в строке. Если вы напечатаете ln() перед любыми другими данными, это, скорее всего, создаст пустую строку (если только последняя строка не имеет конца строки).

String filename="Elements.txt";
PrintWriter pw = new PrintWriter(new FileWriter(filename,true));

String element= ... ;
pw.write(element + ",");

// ... more ...

String valence=...;
pw.write(valence);

pw.println();

pw.close();
person laune    schedule 10.01.2015
comment
Ах, в этом есть смысл, однако после этого я дважды пытался ввести данные и по какой-то странной причине все еще получаю это: i.imgur.com/c789DdS.png Раньше я думал, что дополнительная строка создается с помощью моего pw.println(); в начале, но даже после того, как поставил его в конце, это происходит, и я понятия не имею, почему. - person W. Ahmed; 10.01.2015
comment
Какие данные вы вводили дважды? Там несколько строк по вашему фрагменту и какие-то целые числа, не из этой программы. Вы можете запустить программу, как показано, с println в конце (не впереди), и она будет добавлять одну строку за другой. - person laune; 10.01.2015
comment
1,2,3,4,5 и 6,7,8,9,10 - это данные, которые я добавил - person W. Ahmed; 10.01.2015
comment
Используя код, который я указал в своем первоначальном вопросе, но с функцией pw.println(); в конце как вы предложили - person W. Ahmed; 10.01.2015
comment
Ах, подождите, неважно, он не сохранялся до того, как я запустил, поэтому я запускал более старую версию, добавление pw.println() в конце сработало, такое простое исправление, о котором я никогда не думал, ага, спасибо, что указали на это ! - person W. Ahmed; 10.01.2015