2016-05-17 71 views
0

我在unix服务器上构建一个字符串,然后将其写入windows maschine。要制作换行符,我使用“\ r \ n”,但是服务器只添加了unix换行符“\ n”。要点是eol在十六进制0a和我需要0d0a其他程序。Java - 将unix换行转换为回车

有没有人想过在将文字在Windows机器上书写之前进行换行?

要将字符串转换为十六进制,然后将所有0a替换为0d0a并将其转换回字符串不是最佳做法。有没有人有更好的解决方案

+0

'br'是什么类型?我认为'BufferedReader',但显然这是输入,而不是输出... –

+0

你的问题简单地声称'br'是一个'BufferedWriter'。 ['BufferedWriter'](http://docs.oracle.com/javase/8/docs/api/java/io/BufferedWriter.html)没有'appendLine'方法。所以,再次**,如果你告诉我们'br.appendLine()'中'br'的类型是什么类型,那么我们可以帮助你。 –

+0

对不起,我编辑了问题,_appendLine()_是一个自己写的方法,simlpy添加了“\ r \ n”。 –

回答

4

写入文件"\r\n"将输出"\r\n"而不是"\n",即使在* nix上也是如此。下面是一个例子,使用BufferedWriter因为在一个点上,你说你正在使用一个:

import java.io.*; 

public class Example { 
    public static final void main(String[] args) { 
     System.out.println("Writing to test.txt"); 
     try (
      Writer w = new FileWriter("test.txt"); 
      BufferedWriter bw = new BufferedWriter(w); 
     ) { 
      bw.append("Testing 1 2 3"); 
      bw.append("\r\n"); 
      bw.append("More Testing"); 
      bw.append("\r\n"); 
     } 
     catch (IOException ioe) { 
      System.err.println("Error writing to file: " + ioe.getMessage()); 
     } 
     System.out.println("Done"); 
    } 
} 

运行它:

 
$ java Example 
Writing to test.txt 
Done 

证明其写入\r\n(不只是\n)和输出(是的,我使用的是* nix中,特别是Linux Mint的17.3):

 
$ hexdump -C test.txt 
00000000 54 65 73 74 69 6e 67 20 31 20 32 20 33 0d 0a 4d |Testing 1 2 3..M| 
00000010 6f 72 65 20 54 65 73 74 69 6e 67 0d 0a   |ore Testing..| 
0000001d 
+0

我已经试过了,但它似乎像unix无法解决\ r。 –

+0

@JannickHerrmann:是的,它可以。也许如果你告诉我们什么是“br”,那么更多的上下文...... –

+0

@JannickHerrmann:你的更新问题更一般,只是询问如何去做。这个答案仍然可以解答。我已经添加了一个例子。 –

0

如果你真的想改变默认整个应用程序,重新定义line.separato r启动时的系统属性(带-D参数)。但它是相当重量级的解决方案,只需为需要的特定报告显式编写换行符,而将其余所有内容(如本地日志文件或其他)与unix newlins一起留下,可能会更容易。