回车\用Java换行
我在Unix环境下使用Java代码创建了一个文本文件。回车用Java换行
对于写入文本文件,我使用java.io.FileWriter
和BufferedWriter
。并且对于每行之后的换行符,我使用的是bw.newLine()
方法(其中bw
是BufferedWriter
的对象)。
而且我通过从Unix环境本身附加邮件(自动使用Unix命令)发送该文本文件。
我的问题是,在我从Windows系统的邮件下载文本文件后,如果我打开该文本文件,数据未正确对齐。 newline()
字符是 不工作,我想是的。
如果我还在Windows环境中打开 文本文件,我想要在Unix环境中使用相同的文本文件对齐方式。
我该如何解决问题?
下面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格式的回车输出文件它最初在你的Java程序中。所以,如果你知道文件将始终在Windows机器上打开,你将不得不输出
bw.write(rs.getString(1)==null? "":rs.getString(1));
bw.write("\r\n");
值得一提的是,你不会是能够输出文件,将寻找正确的两个平台上如果它只是纯文本,您可能需要考虑使用html,如果它是电子邮件,或者xml(如果是数据)。或者,您可能需要某种客户端来读取数据,然后将其格式化为查看器正在使用的平台。
的方法newLine()
确保用于Unix兼容的平台,新的行被添加(0Dh 0Ah
为DOS,0Dh
对老的Mac,0Ah
/Linux的)。 Java无法知道您将在哪个平台上发送文本。这种转换应由邮件发送实体负责。
我不明白你的意思。你能解释一下吗? – Manu 2010-05-14 08:38:03
假设您在Linux中使用您最喜欢的编辑器编辑文本。当你按下回车键时,它会做什么?它会附加一个换行符。在这之前,他会问自己:我的换行符是什么?作为Linux,他会回答:当然是“0Ah”。如果您将此文本发送到Windows机器,则Windows机器负责将'0Ah'转换为'0Dh 0Ah',否则查看文本不会太有趣。 – nc3b 2010-05-14 08:43:04
@James:目前的目标系统是Windows。但在一段时间后可能会有所不同。 任何帮助,将不胜感激。 – Manu 2010-05-14 08:43:37
bw.newLine();
无法确保与所有系统的兼容性。
如果您确定它将在Windows中打开,您可以将其格式化为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格式,一个使用windows格式。
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();
}
}
时使用的文字代码块? – 2010-05-14 08:29:31
打开文件的目标系统是否总是窗口,还是会有所不同? – 2010-05-14 08:39:56