java中的回车符(“\ r \ n”)

时间:2010-07-14 16:31:26

标签: java

我使用java代码在unix环境中创建了一个文本文件。

为了编写文本文件,我正在使用java.io.FileWriter和BufferedWriter。 对于每行之后换行我使用bw.write(“\ r \ n”)方法。 (其中bw是BufferedWriter的对象)并通过从unix环境本身附加到其他环境(如(mainframe,windows))发送该文本文件

我的问题是,如果我的客户在大型机系统中下载文本文件, 他们发现在文本文件中有一个“特殊字符”(如小矩形框) 呈现和数据未正确对齐。

bw.write(“\ r \ n”)无法运行我认为是这样..(但在Windows中正常工作)。

我希望在unix环境中使用相同的文本文件对齐,并且没有任何特殊的内容 字符符号,如果他们在大型机,Windows环境中打开文本文件 或任何其他环境。

如何解决问题。感谢您的帮助。

在这里粘贴我的java代码供你参考..(在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();
}

2 个答案:

答案 0 :(得分:6)

与您的声明相反,您的代码显然不是在每行之后写“\ r \ n”。它正在调用BufferedWriter.newLine(),它使用当前平台的默认行分隔符(除非您明确设置了line.separator系统属性)。在Unix系统上,这将是“\ n”。

现在,您需要考虑您希望结果在目标系统上的内容,以便将其读取。对于Windows,这意味着你应该明确地写“\ r \ n”......我不知道你提到的大型机 - 你需要提供更多细节。

请注意,有不同的行分隔符这一事实意味着没有一个文本文件可以普遍适用。不同平台上的许多文本编辑器都可以处理任何行分隔符...但总会有一些不会:(

答案 1 :(得分:1)

要编写具有环境正确行结尾的文件,建议的类为PrintWriterprintln(String)方法将输出给定的字符串以及输出文件的相应行。


但是,Jon Skeet是对的:您的问题不是技术问题,而是要确定哪个系统需要哪种文件格式。如果在Windows系统上处理文件,则预计行以\r\n结尾;在Unix系统上,只有\n

当您使用FTP在不同系统之间传输文件时,所有这一切都变得复杂:ASCII模式将自动为您转换行结尾,二进制不会。

电子邮件对文本格式也不友好:Outlook经常破坏跨系统边界发送的文本文件。

这里的人们知道这种东西。给我们一些更多细节,我们可以提出解决方案。但是,可能无法在一个系统上编写一个可以在任何系统上正确读取的文件。