2015-11-04 4 views
0

Извините за смутное название. У меня есть программа, которая в основном берет ввод пользователя, а затем печатает его в файл. Довольно просто. Ввод состоит из заголовка записки и последующей записки, которая будет помещена под этим заголовком. Между ними будет отметка даты.Является ли форматирование Java переносимым для записи файлов?

Кода я для печати файла выглядит следующим образом:

System.out.println("Memo topic (enter -1 to end):"); 
String message = console.nextLine(); 
now = new Date(); 
String dateStamp = now.toString(); 
out.println(topic + "\n" + dateStamp + "\n" + message); 

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

ThanksgivingWed Nov 4 14:39:36 CST"Pick up some turkey at the Kroger, you 
lazy bum!" said Mom. 

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

+0

вы открываете свой окончательный файл в блокноте? – reos

+0

Да, это просто текстовый файл, открытый в блокноте в Windows. – JoeSchmuck

ответ

6

Я предполагаю, что вы тестируете это на Windows. Это вызовет проблему, потому что в Windows новые строки представлены \r\n (возврат каретки, подача строки), и не все приложения с радостью принимают только \n.

Для того, чтобы получить систему агностик разделитель строки, вы должны использовать вместо System.lineSeparator(), который

Возвращает строку разделитель строки зависит от системы. Он всегда возвращает одно и то же значение - начальное значение свойства system.separator.

В системах UNIX он возвращает «\ n»; в системах Microsoft Windows он возвращает «\ r \ n».

Так что ваш код станет это:

out.println(topic + System.lineSeparator() + dateStamp + System.lineSeparator() + message); 
+0

Спасибо. Итак, сам lineSeparator() определяет, какой символ использовать в зависимости от системы, в которой он выполняется? Если бы я запускал этот же код на другом компьютере, он автоматически определял бы соответствующий разделитель? – JoeSchmuck

+0

@JoeSchmuck Да. Его цель состоит в том, чтобы вам не нужно было об этом беспокоиться. Во время выполнения он вернет правильное значение в зависимости от того, где он запущен. – resueman

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

  • Нет связанных вопросов^_^