Как написать новый символ строки в файл в Java
У меня есть строка, содержащая новые строки. Я отправляю эту строку функции для записи строки в текстовый файл следующим образом:
public static void writeResult(String writeFileName, String text)
{
try
{
FileWriter fileWriter = new FileWriter(writeFileName);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(text);
// Always close files.
bufferedWriter.close();
}
catch(IOException ex) {
System.out.println("Error writing to file '"+ writeFileName + "'");}
} //end writeResult function
Но когда я открываю файл, я нахожу его без каких-либо новых строк.
Когда я показываю текст на экране консоли, он отображается с новыми строками. Как написать новый символ строки в текстовом файле.
EDIT:
Предположим, что это аргумент text
, который я отправил в вышеприведенную функцию:
I returned from the city about three o'clock on that
may afternoon pretty well disgusted with life.
I had been three months in the old country, and was
Как написать эту строку как есть (с новыми строками) в текстовом файле. Моя функция записывает строку в одну строку. Можете ли вы предоставить мне способ записать текст в файл, включая новые строки?
ИЗМЕНИТЬ 2:
Текст изначально находится в TXT файле. Я прочитал текст, используя:
while((line = bufferedReader.readLine()) != null)
{
sb.append(line); //append the lines to the string
sb.append('\n'); //append new line
} //end while
где sb
- StringBuffer
Ответы
Ответ 1
В ИЗМЕНИТЬ 2:
while((line = bufferedReader.readLine()) != null)
{
sb.append(line); //append the lines to the string
sb.append('\n'); //append new line
} //end while
вы читаете текстовый файл и добавляете к нему новую строку. Не добавляйте новую строку, которая не будет показывать новую строку в некоторых простых редакторах Windows, таких как "Блокнот". Вместо этого добавьте строку разделителя строки для ОС, используя:
sb.append(System.lineSeparator());
(для Java 1.7 и 1.8)
или
sb.append(System.getProperty("line.separator"));
(Java 1.6 и ниже)
В качестве альтернативы, позже вы можете использовать String.replaceAll()
для замены "\n"
в строке, построенной в StringBuffer, с символом новой строки для ОС:
String updatedText = text.replaceAll("\n", System.lineSeparator())
но было бы более удобно добавлять его при создании строки, чем добавить '\n'
и заменить ее позже.
Наконец, как разработчик, если вы используете блокнот для просмотра или редактирования файлов, вам следует отказаться от него, поскольку есть гораздо более способные инструменты, такие как Notepad ++ или вашей любимой Java IDE.
Ответ 2
Класс BufferedWriter предлагает метод newLine()
. Использование этого гарантирует независимость платформы.
Ответ 3
ПРОСТОЕ РЕШЕНИЕ
File file = new File("F:/ABC.TXT");
FileWriter fileWriter = new FileWriter(file,true);
filewriter.write("\r\n");
Ответ 4
bufferedWriter.write(text + "\n");
Этот метод может работать, но новый символ линии может быть разным между платформами, поэтому альтернативно вы можете использовать этот метод:
bufferedWriter.write(text);
bufferedWriter.newline();
Ответ 5
Разделите строку в строковый массив и напишите, используя метод выше (я предполагаю, что ваш текст содержит \n для получения новой строки)
String[] test = test.split("\n");
и внутри цикла
bufferedWriter.write(test[i]);
bufferedWriter.newline();
Ответ 6
Поместите этот код везде, где вы хотите вставить новую строку:
bufferedWriter.newLine();
Ответ 7
Вот фрагмент, который получает символ новой строки по умолчанию для текущей платформы.
использование System.getProperty("os.name")
и System.getProperty("os.version").
Пример:
public static String getSystemNewline(){
String eol = null;
String os = System.getProperty("os.name").toLowerCase();
if(os.contains("mac"){
int v = Integer.parseInt(System.getProperty("os.version"));
eol = (v <= 9 ? "\r" : "\n");
}
if(os.contains("nix"))
eol = "\n";
if(os.contains("win"))
eol = "\r\n";
return eol;
}
Где eol - это символ новой строки