Java中的回车\换行

Man*_*anu 51 java line-endings eol carriage-return linefeed

我使用Java代码在Unix环境中创建了一个文本文件.

对于写文本文件我使用java.io.FileWriterBufferedWriter.并且对于每行之后的换行我使用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();
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*s B 61

Java只知道它当前运行的平台,因此它只能在该平台上为您提供与平台相关的输出(使用bw.newLine()).您在Windows系统上打开它的事实意味着您必须在使用之前转换文件(使用您编写的内容或使用unix2dos之类的程序),或者您必须输出带有Windows格式的文件回车符它最初是在你的Java程序中.因此,如果您知道该文件将始终在Windows机器上打开,则必须输出

bw.write(rs.getString(1)==null? "":rs.getString(1));
bw.write("\r\n");
Run Code Online (Sandbox Code Playgroud)

值得注意的是,如果它只是您正在使用的纯文本,您将无法输出在两个平台上看起来都正确的文件,如果是电子邮件,您可能需要考虑使用html,如果它是xml,则可能需要考虑使用xml是数据.或者,您可能需要某种类型的客户端来读取数据,然后将其格式化为查看者正在使用的平台.

  • Windows上的行尾序列是CR LF,而不是LF CR,所以我将其更改为`br.write("\ r \n");`(而不是`\n\r``). (6认同)
  • @ADTC什么都不会被自动转换 - 在这个例子中,您将原始字节值写入文件 (2认同)

nc3*_*c3b 7

该方法newLine()确保添加与平台兼容的新行(0Dh 0Ah对于DOS,0Dh对于较旧的Mac,0Ah对于Unix/Linux).Java无法知道您要在哪个平台上发送文本.邮件发送实体应该对此转换进行处理.