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.

Другие вопросы по тегам