Java: копировать строки из файла в другой, не теряя «формат новой строки» - PullRequest
1 голос
/ 22 августа 2011

Извините заранее, если название вводит в заблуждение / неправильно, но это лучшее, что я могу сделать после действительно долгого дня, потраченного на практику с Java. (мой мозг тает)

Я поместил этот код вместе, чтобы прочитать файл и скопировать его в другой файл, пропуская строку / строки, начинающиеся с данной строки (BeginOfTheLineToRemove). Это на самом деле работает и удаляет нужную строку, но по какой-то причине забывает о \ n (новая строка). Интервал и символы копируются. Я не могу понять это. Я действительно надеюсь, что кто-то поможет. ура от java новичка из Италии;)

public void Remover(String file, String BeginOfTheLineToRemove) {
    File StartingFile = new File(file);
    File EndingFile = new File(StartingFile.getAbsolutePath() + ".tmp");

    BufferedReader br = new BufferedReader(new FileReader(file));
    PrintWriter pw = new PrintWriter(new FileWriter(EndingFile));

    String line;
    while ((line = br.readLine()) != null) {
        if (line.startsWith(LineToRemoveThatBeginWithThis)) {
            continue;
        }
        pw.write(line);
    }

    pw.close();
    br.close();
}

Ответы [ 6 ]

5 голосов
/ 22 августа 2011

Используйте pw.println вместо pw.write.println добавляет символ новой строки после записи содержимого.

3 голосов
/ 22 августа 2011

Вы используете PrintWriter.write() для записи строк - по умолчанию это не запись новой строки в конце.Вместо этого используйте println().

1 голос
/ 22 августа 2011

BufferedReader # readLine Документация гласит:

Возвращает: строка, содержащая содержимое строки, не включая символы окончания строки, или ноль, если конец строкидостигнут поток

То есть считыватель удаляет символы завершения строки из ваших строк, поэтому вам нужно вручную добавить их снова:

// \n on Linux/Mac, \r\n on Windows
String lineSep = System.getProperty("line.separator"); 
pw.write(line);
pw.write(lineSep);
1 голос
/ 22 августа 2011

Это , вероятно, поможет вам.

Метод BufferedReader.readLine () не читает символы завершения строки. Поэтому ваша строка не будет содержать символов завершения.

0 голосов
/ 22 августа 2011

Вне цикла получите системный разделитель строк:

String lineSeparator = System.getProperty("line.separator");

Затем добавьте это к строке, которую вы прочитали:

pw.write(line+lineSeparator);
0 голосов
/ 22 августа 2011

BufferedReader.readLine () использует символ новой строки для определения конца строки, а возвращаемая строка не содержит этот символ новой строки.Новая строка является разделителем, поэтому она не считается частью данных.

Чтобы компенсировать это, вы можете добавить новую строку к выводу, например:

while((line = br.readLine()) != null) {
    if(line.startsWith(LineToRemoveThatBeginWithThis)) continue;
    pw.write(line);
    pw.println();
}

Дополнительнаявызов метода PrintWriter.println () напечатает новую строку после того, как вы напишете свою строку текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...