函数:
1 //保存json 文件
2 public static boolean createJsonFile(String jsonString, String filePath, String fileName) {
3 // 标记文件生成是否成功
4 boolean flag = true;
5 // 拼接文件完整路径
6 String fullPath = filePath + File.separator + fileName + ".json";
7
8 // 生成json格式文件
9 try {
10 // 保证创建一个新文件
11 File file = new File(fullPath);
12 if (!file.getParentFile().exists()) { // 如果父目录不存在,创建父目录
13 file.getParentFile().mkdirs();
14 }
15 if (file.exists()) { // 如果已存在,删除旧文件
16 file.delete();
17 }
18 file.createNewFile();
19 // 格式化json字符串
20 jsonString = JsonFormatTool.formatJson2(jsonString);
21
22 // 将格式化后的字符串写入文件
23 Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
24 write.write(jsonString);
25 write.flush();
26 write.close();
27 } catch (Exception e) {
28 flag = false;
29 e.printStackTrace();
30 }
31
32 // 返回是否成功的标记
33 return flag;
34 }
工具类:
1 package com.util;
2
3 public class JsonFormatTool {
4 /**
5 * 单位缩进字符串。
6 */
7 private static String SPACE = " ";
8
9 /**
10 * 返回格式化JSON字符串。
11 *
12 * @param json 未格式化的JSON字符串。
13 * @return 格式化的JSON字符串。
14 */
15 public static String formatJson(String json) {
16 StringBuffer result = new StringBuffer();
17
18 int length = json.length();
19 int number = 0;
20 char key = 0;
21
22 // 遍历输入字符串。
23 for (int i = 0; i < length; i++) {
24 // 1、获取当前字符。
25 key = json.charAt(i);
26
27 // 2、如果当前字符是前方括号、前花括号做如下处理:
28 if ((key == '[') || (key == '{')) {
29 // (1)如果前面还有字符,并且字符为“:”,打印:换行和缩进字符字符串。
30 if ((i - 1 > 0) && (json.charAt(i - 1) == ':')) {
31 result.append('
');
32 result.append("allow");
33 result.append(":");
34 //result.append(indent(number));
35 }
36
37 // (2)打印:当前字符。
38 result.append(key);
39
40 // (3)前方括号、前花括号,的后面必须换行。打印:换行。
41 result.append('
');
42
43 // (4)每出现一次前方括号、前花括号;缩进次数增加一次。打印:新行缩进。
44 number++;
45 result.append(indent(number));
46
47 // (5)进行下一次循环。
48 continue;
49 }
50
51 // 3、如果当前字符是后方括号、后花括号做如下处理:
52 if ((key == ']') || (key == '}')) {
53 // (1)后方括号、后花括号,的前面必须换行。打印:换行。
54 result.append('
');
55
56 // (2)每出现一次后方括号、后花括号;缩进次数减少一次。打印:缩进。
57 number--;
58 result.append(indent(number));
59
60 // (3)打印:当前字符。
61 result.append(key);
62
63 // (4)如果当前字符后面还有字符,并且字符不为“,”,打印:换行。
64 if (((i + 1) < length) && (json.charAt(i + 1) != ',')) {
65 //result.append('
');
66 }
67
68 // (5)继续下一次循环。
69 continue;
70 }
71 // 4、如果当前字符是逗号。逗号后面换行,并缩进,不改变缩进次数。
72 if ((key == ',')) {
73 result.append(key);
74 //result.append('
');
75 result.append(indent(number));
76 continue;
77 }
78 // 5、打印:当前字符。
79 result.append(key);
80 }
81 return result.toString();
82 }
83
84 /**
85 * 返回指定次数的缩进字符串。每一次缩进三个空格,即SPACE。
86 *
87 * @param number 缩进次数。
88 * @return 指定缩进次数的字符串。
89 */
90 private static String indent(int number) {
91 StringBuffer result = new StringBuffer();
92 for (int i = 0; i < number; i++) {
93 result.append(SPACE);
94 }
95 return result.toString();
96 }
97
98 public static String formatJson2(String json) {
99 StringBuffer result = new StringBuffer();
100 result.append("{");
101 result.append("
");
102 result.append(SPACE);
103 //添加json字符串
104 result.append('"');
105 result.append("allow");
106 result.append('"');
107 result.append(":");
108 result.append(json);
109 result.append("
");
110 result.append("}");
111 return result.toString();
112 }
113 }