我已创建使用Java代码在Unix环境的文本文件。

有关我使用java.io.FileWriterBufferedWriter写入文本文件。和用于我使用bw.newLine()方法(其中bwBufferedWriter的对象)的每一行之后换行符。

和我被从Unix环境本身在邮寄附加发送该文本文件(自动化的使用UNIX命令)。

我的问题是,当我从下载邮件的文本文件在Windows系统中,如果我 打开该文本文件中的数据没有正确对齐。 newline()性格 没有工作,我是这么认为的。

我想同一个文本文件对齐,因为它是在Unix环境中,如果我打开 在Windows环境下也文本文件。

我该如何解决这个问题?

下面以供参考(在Unix环境中运行)Java代码:

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 的),或者你必须输出与它的窗口格式回车原本在Java程序中的文件。所以,如果你知道文件将始终在Windows机器上打开,你将不得不输出

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

这是值得注意的是,你不会是能够输出文件,将看这两个平台上正确的,如果它是您只使用纯文本,你可能要考虑使用的HTML,如果它是一个电子邮件,或XML如果是数据。或者,你可能需要一些类型的客户端读取数据,然后将其格式化为平台,观众使用。

其他提示

的方法newLine()确保平台兼容新行被添加(0Dh 0Ah用于DOS,0Dh对老的Mac,0Ah用于Unix / Linux)的。 Java有没有办法知道你要发送的文字,其平台的方式。该转换应该由邮件发送实体来照顾。

不知道是谁在你的文件看起来,但如果你在写字板代替记事本打开它,换行符会显示正确。如果您使用的是特殊的文件扩展名,它与写字板关联,你用它做。或使用任何其他更先进的文本编辑器。

bw.newLine();不能确保与所有系统的兼容性。

如果您确信它会在窗口中打开,您可以将其格式化到Windows换行符。

如果您已经使用本机UNIX命令,尝试unix2dos和德已经生成的文件转换为Windows格式,然后发送邮件。

如果你不使用UNIX命令和喜欢做它在Java中,使用``bw.write(“\ r \ n”)`,如果没有你的程序复杂,有一个方法找出工作系统并写入适当的换行符。

如果我理解你的权利,我们谈论一个文本文件附件。 那是不幸的,因为如果是电子邮件的正文,你总是可以用“\ r \ n”,指的 http://www.faqs.org/rfcs/rfc822.html

但因为它是一个附件,你必须用系统的不同生活。如果我是你的话,我会选择其中一个选项:

a)仅通过使用支持Windows客户端为 “\ r \ n” 个如线端。

b)中提供两个附件文件,一个与Linux格式和一个与窗口格式。

C)我不知道,如果附件是由人或机器读取,但如果是人,我会考虑附加一个HTML文件,而不是纯文本的。更便携和更漂亮,也:)

封装你作家提供焦炭置换,如下所示:

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