我使用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();
}
答案 0 :(得分:6)
与您的声明相反,您的代码显然不是在每行之后写“\ r \ n”。它正在调用BufferedWriter.newLine()
,它使用当前平台的默认行分隔符(除非您明确设置了line.separator
系统属性)。在Unix系统上,这将是“\ n”。
现在,您需要考虑您希望结果在目标系统上的内容,以便将其读取。对于Windows,这意味着你应该明确地写“\ r \ n”......我不知道你提到的大型机 - 你需要提供更多细节。
请注意,有不同的行分隔符这一事实意味着没有一个文本文件可以普遍适用。不同平台上的许多文本编辑器都可以处理任何行分隔符...但总会有一些不会:(
答案 1 :(得分:1)
要编写具有环境正确行结尾的文件,建议的类为 PrintWriter
。 println(String)
方法将输出给定的字符串以及输出文件的相应行。
\r\n
结尾;在Unix系统上,只有\n
。
当您使用FTP在不同系统之间传输文件时,所有这一切都变得复杂:ASCII模式将自动为您转换行结尾,二进制不会。
电子邮件对文本格式也不友好:Outlook经常破坏跨系统边界发送的文本文件。
这里的人们知道这种东西。给我们一些更多细节,我们可以提出解决方案。但是,可能无法在一个系统上编写一个可以在任何系统上正确读取的文件。