Вопрос

Я создал текстовый файл в среде Unix, используя код Java.

Для записи текстового файла я использую java.io.FileWriter а также BufferedWriter. Отказ И для новой строки после каждой строки я использую bw.newLine() метод (где bw это объект BufferedWriter).

И я отправляю этот текстовый файл, прикрепив в почте с самой среды Unix (автоматически с использованием команд Unix).

Моя проблема заключается в том, что после загрузки текстового файла из почты в системе Windows, если я открыл этот текстовый файл, данные не совпадают правильно. newline() Характер не работает, я так думаю.

Я хочу же самое текстовое выравнивание файлов, так как он находится в среде Unix, если я открыл текстовый файл в Windows Environment.

Как мне решить проблему?

Код Java ниже для вашей ссылки (работает в среде Unix):

File f = new File(strFileGenLoc);
BufferedWriter bw = new BufferedWriter(new FileWriter(f, false));
rs = stmt.executeQuery("select * from jpdata");
while ( rs.next() ) {
    bw.write(rs.getString(1)==null? "":rs.getString(1));
    bw.newLine();
}
Это было полезно?

Решение

Java знает только о платформе, на которой он работает, поэтому он может дать вам только зависимый от платформы на этой платформе (используя bw.newLine()). Тот факт, что вы открываете его в системе Windows, означает, что вам либо необходимо преобразовать файл перед его использованием (используя то, что вы написали, или используя программу, как Unix2dos.), или вы должны выводить файл с помощью каретки Windows Format Rears, изначально в вашей программе Java. Так что если вы знаете, файл всегда будет открыт на машине Windows, вам придется выводить

bw.write(rs.getString(1)==null? "":rs.getString(1));
bw.write("\r\n");

Стоит отметить, что вы не сможете выводить файл, который будет выглядеть правильно на обеих платформах, если это просто простой текст, который вы используете, вы можете рассмотреть возможность использования HTML, если это электронное письмо или XML, если это это данные. Альтернативно, вам может понадобиться какой-то клиент, который читает данные, а затем форматирует его для платформы, которую использует просмотрщик.

Другие советы

Метод newLine() обеспечивает добавленную платформу совместимую новую строку (0Dh 0Ah для дос, 0Dh для пожилых Mac, 0Ah Для Unix / Linux). Java не имеет способов узнать, на какой платформе вы собираетесь отправить текст. Это преобразование следует позаботиться о отправке почты.

Не знаю, кто смотрит на ваш файл, но если вы откроете его в WordPad вместо блокнота, линии пройдут верны. В случае, если вы используете специальное расширение файла, ассоциируйте его со WordPad, и вы закончите с ним. Или используйте любой другой более продвинутый текстовый редактор.

bw.newLine(); не может обеспечить совместимость со всеми системами.

Если вы уверены, что он будет открыт в Windows, вы можете отформатировать его в Windows Newline.

Если вы уже используете нативные команды Unix, попробуйте unix2dos и конвертировать уже сгенерированный файл в формат Windows, а затем отправьте почту.

Если вы не используете команды Unix и предпочитаете сделать это в Java, используйте `` bw.write (" r n") `и если он не усложняет вашу программу, иметь метод, который выясняет операционную систему и пишет соответствующая новая линия.

Если я понимаю вас правильно, мы говорим о приложении текстовых файлов. Это несчастный, потому что если это было телом сообщения электронной почты, вы всегда можете использовать « R n», ссылаясь на http://www.faqs.org/rfcs/rfc822.html.

Но как это привязанность, вы должны жить с системными различиями. Если бы я был на вашей обуви, я бы выбрал один из этих вариантов:

а) Поддерживайте только клиентов Windows с помощью « R n» в качестве линии строки.

b) Укажите два файла вложения, один с форматом Linux и один с форматом Windows.

c) Я не знаю, если вложение будет читаться людьми или машинами, но если это люди, я бы рассмотрел прикрепление HTML-файла вместо простого текста. Более портативный и много красивее тоже :)

Инкционируйте свой писатель, чтобы обеспечить замену Char, как это:

public class WindowsFileWriter extends Writer {

    private Writer writer;

    public WindowsFileWriter(File file) throws IOException {
        try {
            writer = new OutputStreamWriter(new FileOutputStream(file), "ISO-8859-15");
        } catch (UnsupportedEncodingException e) {
            writer = new FileWriter(logfile);
        }
    }

    @Override
    public void write(char[] cbuf, int off, int len) throws IOException {
        writer.write(new String(cbuf, off, len).replace("\n", "\r\n"));
    }

    @Override
    public void flush() throws IOException {
        writer.flush();
    }

    @Override
    public void close() throws IOException {
        writer.close();
    }

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top