Написание символа новой строки в Java, который работает в разных ОС - PullRequest
3 голосов
/ 17 января 2012

У меня есть программа на Java, которая генерирует текстовый файл на сервере UNIX.Этот текстовый файл затем отправляется на компьютер клиента с помощью других систем, где он должен быть открыт в блокноте в Windows.Поскольку мы хорошо знаем, что блокнот не сможет найти новую строку, поскольку он использует Windows CR LF.

Я использую

System.getProperty("line.separator");

Есть ли другой способ добиться независимости платформы, такчто файл, сгенерированный в UNIX, может отображаться в блокноте Windows с правильным форматированием, например, при изменении какого-либо свойства UNIX для новой строки?

Блокнот является обязательным условием, следовательно, изменить это невозможно.

Ответы [ 6 ]

5 голосов
/ 23 июня 2015

Поскольку Java 7 System.lineSeparator() ..

API Java постоянно меняются со временем.Написание символа новой строки в Java, который работает в разных ОС, может быть достигнуто с помощью System.lineSeparator() API, который существует с Java 7. Отметьте это, System.lineSeperator ()

3 голосов
/ 17 января 2012

Нет. Вам нужно выбрать один формат файла, Windows или UNIX. Учитывая, что вашему клиенту требуется блокнот, вы, вероятно, можете выбрать формат Windows, что означает, что вам просто нужны символы "\ r \ n". Тот факт, что UNIX генерирует файл, можно считать несущественным.

0 голосов
/ 18 января 2012

Не существует прямого способа иметь такой совместимый простой текстовый файл. Следовательно, придется перейти к структурированному файлу, такому как doc, excel или pdf, или просто исправить формат в Windows или UNIX и сообщить конечным пользователям, чтобы они использовали его.

Этот ответ является совокупностью приведенного выше обсуждения.

Большое спасибо сообществу за помощь. Если найдется какое-либо другое решение проблемы. Пожалуйста, оставьте сообщение для других:)

0 голосов
/ 17 января 2012

Вы проверили, может ли сервер UNIX переносить переводы в стиле Windows?Поскольку требование редактируется в Блокноте, вам нужно будет поместить в файл новые строки в стиле Windows, используя System.print("\r\n").

Если сервер UNIX не может обрабатывать разделители строк Windows, тогда, вероятно, ваш лучший вариант - это обработкафайл после редактирования, чтобы преобразовать переводы строки, используя dos2unix на сервере UNIX.

Требование Notepad означает, что на самом деле это не требование независимости платформы - это требование для сервера Unix:понимать переводы строк в Windows.

0 голосов
/ 17 января 2012
System.getProperty("line.separator");

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

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

0 голосов
/ 17 января 2012

Mac OS X поддерживает CR, LF и CRLF Linux использует LF, но файлы, использующие CRLF и CR, тоже визуализируются. Windows использует CRLF

ответ: просто всегда используйте CRLF, тогда у вас есть поддержка для всех платформ.

CR = '\ r', LF = '\ n'

так что просто сделайте строки в формате: "mytexthereblahblahblah \ r \ n"

...