2016-05-17 68 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一起留下,可能會更容易。