2015-11-03 2 views
2

Моя программа принимает ввод текстового файла, который имеет слова, каждый из которых разделен символом новой строки, и моя программа берет его и обрабатывает данные, а затем мне требуется вывод в новый файл, сохраняя вывод консоли.Почему n и (String) System.getProperty ("line.separator"); действовать по-разному?

Теперь мне интересно, почему, когда я добавляю «\ n» в свой stringBuilder, он печатает его как бы в новой строке на консоли, но в выводе файла он не воспринимает его как новая строка и просто помещает все слова в одну строку.

Когда я использую newLine, то только он дает новую строку как на моем выходе на консоль, так и на моем выходном файле. Почему это? Что это делает (String) System.getProperty («line.separator»), что вызывает это?

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

try{ 
    BufferedReader fileIn = new BufferedReader(new FileReader(fileName)); 

    stringBuilder.append(newLine); 
    while((s = fileIn.readLine()) != null){ 
     stringBuilder.append(s); 
     stringBuilder.append(newLine);//using newLine, 
    } 
     String a = stringBuilder.toString(); 

    if(s== null){ 
     fileIn.close(); 
    } 
+1

Потому что на некоторых системах (думаю, OSX или Windows) '\ n' не является разделителем строк? –

+0

вы должны использовать 'System.lineSeparator()' и не нужно приводить результат к 'String' –

ответ

2

Потому что на некоторых системах (Windows) новая строка определяется как \n в то время как на других (Linux/Unix) это \r или \r\n. В зависимости от программного обеспечения, читающего текст, они могут предпочесть придерживаться этого или быть более «прощающим».

Соответствующий текст Википедии (https://en.wikipedia.org/wiki/Newline):

система на основе ASCII или совместимый набор символов можно использовать либо LF (линия подачи, '\ п', 0x0A, 10 в десятичной системе) или CR (возврат каретки , '\ г', 0x0D, 13 в десятичной системе) по отдельности или CR следуют LF (CR + LF, '\ г \ п', 0x0D0A)

по этой же причине вы можете получить систему -defined разделитель строк из класса System, как и вы, а не для например, если она будет некоторой константой в классе String.

1

System.getProperty("line.separator") отличается от "\n" тем, что бывший возвращает разделитель линии ОС (не всегда \n). \n - это всего лишь строка, и когда вы открываете выходной файл в программе, которая не интерпретирует \n как новую строку (скажем, «Блокнот в Windows»), вы не увидите эту новую строку.

Смежные вопросы