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