2016-09-05 51 views
0

我編寫了一個代碼,它可以從網站獲取JSON文本並對其進行格式化,以便於閱讀。我的代碼的問題是:BufferedWriter不會正確寫入JSON字符串

public static void gsonFile(){ 
    try { 
    re = new BufferedReader(new FileReader(dateiname)); 
    Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
    JsonParser jp = new JsonParser(); 
    String uglyJSONString =""; 
    uglyJSONString = re.readLine(); 
    JsonElement je = jp.parse(uglyJSONString); 
    String prettyJsonString = gson.toJson(je); 
    System.out.println(prettyJsonString); 

    wr = new BufferedWriter(new FileWriter(dateiname)); 
    wr.write(prettyJsonString); 

    wr.close(); 
    re.close(); 

} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
} 

它正確打印成控制檯:http://imgur.com/B8MTlYW.png

但在我的txt文件,它看起來像這樣:http://imgur.com/N8iN7dv.png

我能做到這一點,正確打印它進入文件? (用新行分隔)

+0

對不起,編輯它。 –

+0

我的不好:那些不是圖像,不應該這樣發佈。它們應該作爲代碼格式的文本發佈。請通過[幫助]瞭解更多信息。 –

回答

2

Gson使用\n作爲行分隔符(如可在newline方法here中看到的那樣)。

由於記事本不明白\n您可以打開你的結果文件與其他文件編輯器(寫字板Notepad++AtomSublime Text等)或寫之前更換\n通過\r\n

prettyJsonString = prettyJsonString.replace("\n", "\r\n"); 
+0

謝謝,這工作:) –

1

這是你的文本編輯器的問題。不包含文字。它不正確地處理新行字符。 (Windows方式)符號和Gson只生成LF符號(Unix方式)。

+0

試着用另一個編輯器打開它(我知道你可以看到記事本++的空白字符),並檢查那裏的佈局和空白。 – Timo

2

的FileReader和FileWriter的是使用該平臺的編碼舊實用程序類。這提供了非便攜式文件。而對於JSON,通常使用UTF-8。

Path datei = Paths.get(dateiname); 
re = Files.newBufferedReader(datei, StandardCharsets.UTF_8); 

或者

List<String> lines = Files.readAllLines(datei, StandardCharsets.UTF_8); 
// Without line endings as usual. 

或者

String text = new String(Files.readAllBytes(datei), StandardCharsets.UTF_8); 

及更高版本:

Files.write(text.getBytes(StandardCharsets.UTF_8));