Java println: Windows против Linux - PullRequest
1 голос
/ 23 июня 2011

У меня есть Java-программа, которая записывает файл в файловую систему удаленного компьютера, используя библиотеку jcifs -samba stuff;SmbFile => SmbFileOutputStream => PrintStream и я использую общий println (String).Все работало нормально, пока я не переместил свое приложение на Linux-машину, и теперь напечатанный файл на моей удаленной Windows-машине выглядит странно.

Я считаю, что проблема в том, как две ОС обрабатывают CR, LF, которые вставляютсяфункция println ().Мой 'jar' выполняется один раз в день, и он запускается crontab через файл запуска 'sh'.

  • Есть ли способ исправить проблему, не касаясь java-кода?
  • Есть ли способ написать Java-программу, чтобы она работала на обоих типах ОС (возможно, на всех)?

Спасибо

Ответы [ 4 ]

4 голосов
/ 23 июня 2011

Попробуйте поиграться с системным свойством "line.separator" .Вы можете прочитать это для справки.

0 голосов
/ 23 июня 2011

System.out.println является PrintStream, который использует настройку среды для line.separator в качестве, ну, в общем, разделителя строк.Одним из решений вашей проблемы было бы передать аргумент -Dline.separator.

Вероятно, лучшее решение - просто использовать просмотр вашего файла в лучшем редакторе.Notepad ++ и многие другие в Windows будут понимать оба типа окончаний строк, а блокнот - нет.Даже встроенный WordPad лучше отображает окончания файлов Unix.

0 голосов
/ 23 июня 2011

Вам придется изменить новый разделитель строк в файле.В linux есть утилита под названием dos2unix , которая преобразует разделитель новой строки существующего файла из dos / windows в linux / unix.

0 голосов
/ 23 июня 2011

Если ваш java-файл запускается на машине linux, println будет использовать стандарт linux "\ n" Если вы хотите, чтобы он всегда использовал \ r \ n, не меняя системных свойств, просто замените ваш println ("текст") с печатью ("текст \ r \ n"). Или создайте пользовательскую функцию printWindowsLine, чтобы сделать это

...