Java BufferedWriter无法正确写入JSON字符串

Java BufferedWriter无法正确写入JSON字符串,java,json,string,writer,Java,Json,String,Writer,我编写了一段代码,从网站获取JSON文本,并对其进行格式化,以便于阅读。我对代码的问题是: public static void gsonFile(){ try { re = new BufferedReader(new FileReader(dateiname)); Gson gson = new GsonBuilder().setPrettyPrinting().create(); JsonParser jp = new JsonParser(); Str

我编写了一段代码,从网站获取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();
}
}
它会正确地将其打印到控制台中:

但在我的txt文件中,它如下所示:


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

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


我想它期望
crlf
(Windows方式)符号和
Gson
仅生成
LF
符号(Unix方式)。

这是文本编辑器的问题。不带文本。它错误地处理新行字符


我假设它期望
crlf
(Windows方式)符号和
Gson
仅生成
LF
符号(Unix方式)。

Gson使用
\n
作为行分隔符(如
换行方法所示)

由于记事本不理解
\n
,您可以使用另一个文件编辑器(写字板,,等)打开结果文件,或者在写入之前将
\n
替换为
\r\n

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

Gson使用
\n
作为行分隔符(可以在
换行方法中看到)

由于记事本不理解
\n
,您可以使用另一个文件编辑器(写字板,,等)打开结果文件,或者在写入之前将
\n
替换为
\r\n

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

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


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

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


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

FileReader和FileWriter是使用平台编码的旧实用程序类。这会产生不可移植的文件。对于JSON,通常使用UTF-8

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

后来:

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

FileReader和FileWriter是使用平台编码的旧实用程序类。这会产生不可移植的文件。对于JSON,通常使用UTF-8

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

后来:

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

抱歉,编辑了它。我的错:这些不是图片,不应该这样发布。它们应该作为代码格式的文本发布。请浏览以了解更多信息。抱歉,编辑了它。我的错:这些不是图像,不应该以这样的方式发布。它们应该作为代码格式的文本发布。请浏览以了解更多信息。请尝试使用其他编辑器打开它(我知道您可以使用notepad++查看空白字符),并检查布局和空白。尝试使用其他编辑器打开它(我知道您可以使用notepad++查看空白字符)然后检查那里的布局和空白。