BufferedWriter 没有正确写入 JSON 字符串

BufferedWriter doesnt write JSON String correctly

我编写了一段代码,从网站获取 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

我该怎么做才能将其正确打印到文件中? (以新行分隔)

你的文本编辑器有问题。不带文字。它错误地处理换行符。

我想它期望 CR LF(Windows 方式)符号并且 Gson 只生成 LF 符号(Unix 方式)。

Gson使用\n作为行分隔符(在newline方法here中可以看出)。

由于 记事本 不理解 \n 您可以使用其他文件编辑器打开您的结果文件(写字板Notepad++, Atom, Sublime Text, 等)或在写入前将 \n 替换为 \r\n:

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

快速搜索后,这个主题可能会派上用场。

Strings written to file do not preserve line breaks

此外,像其他人所说的那样在另一个编辑器中打开也会有帮助

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));