Java - конвертировать перевод строки Unix в возврат каретки
Я строю строку на Unix-сервере и записываю ее на Windows-машину. Для создания перевода строки я использую "\r\n", но затем сервер добавляет только перевод строки unix "\n". Дело в том, что eol находится в гекс 0a, и мне нужно 0d0a для других программ.
У кого-нибудь была идея преобразовать перевод строки перед тем, как записать его на машину Windows?
Чтобы преобразовать строку в шестнадцатеричный формат, затем заменить все 0a на 0d0a, а преобразование обратно в строку - не лучшая практика. У кого-нибудь есть лучшее решение?
2 ответа
Пишу "\r\n"
в файл выведет "\r\n"
не "\n"
, в файл, даже на *nix. Вот пример, используя BufferedWriter
так как в какой-то момент вы сказали, что используете один:
import java.io.*;
public class Example {
public static final void main(String[] args) {
System.out.println("Writing to test.txt");
try (
Writer w = new FileWriter("test.txt");
BufferedWriter bw = new BufferedWriter(w);
) {
bw.append("Testing 1 2 3");
bw.append("\r\n");
bw.append("More Testing");
bw.append("\r\n");
}
catch (IOException ioe) {
System.err.println("Error writing to file: " + ioe.getMessage());
}
System.out.println("Done");
}
}
Запуск это:
Пример $ java Запись в test.txt Готово
Доказательство это пишет \r\n
(не просто \n
) к выводу (да, я использую *nix, в частности Linux Mint 17.3):
$ hexdump -C test.txt 00000000 54 65 73 74 69 6e 67 20 31 20 32 20 33 0d 0a 4d | Тестирование 1 2 3..M| 00000010 6f 72 65 20 54 65 73 74 69 6e 67 0d 0a | Испытание руды..| 0000001d
Если вы действительно хотите изменить значение по умолчанию для всего приложения, переопределите системное свойство line.separator при запуске (с параметром -D). Но это довольно тяжеловесное решение, может быть проще просто явно написать символы новой строки для конкретных отчетов, которые вам нужны, а все остальное (например, собственные файлы журналов или что-то еще) оставить в новой версии Unix.