java 项目中很重要的一步就是读取配置文件,主要是 properties 和 xml 文件,json 文件没见过,但觉得 json 文件和这两个类似,就顺便看了一下,前端最常用的配置文件不就一个 package.json 嘛。

这是本文代码的文件结构,很简单。
需用用的的 jar 包

网上很容易找到,如果找不到可以私信我。
读取 properties 文件
test.properties 中的内容:
name=ethan
home=jiangsunantong
age=24
代码:
private static void readProperties() throws IOException {
Properties properties = new Properties();
properties.load(new FileInputStream("resources/test.properties"));
String propName = properties.getProperty("name");
System.out.println("propName:" + propName);
}
输出:
propName:ethan
读取 xml 文件
demo.xml 中的内容:
<?xml version="1.0" encoding="utf-8" ?>
<students color="red">
<student>
<name>ethan</name>
<age>20</age>
</student>
<student>
<name>ethan1</name>
<age>21</age>
</student>
<student>
<name>ethan2</name>
<age>22</age>
</student>
<student>
<name>ethan3</name>
<age>23</age>
</student>
</students>
代码:
private static void readXML() throws DocumentException {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File("resources/demo.xml"));
Element element = document.getRootElement();
Attribute attribute = element.attribute("color");
System.out.println(attribute.getValue());
List<Element> list = element.elements("student");
for (Element em : list) {
System.out.println(em.element("name").getText());
System.out.println(em.element("age").getText());
}
}
输出:
red
ethan
20
ethan1
21
ethan2
22
ethan3
23
这里采用的是 Dom4j 解析,还有别的方法可以参考这篇。
读取 json 文件
这里需要注意一下,我一开始运行的时候会报这个错:

查看源代码:


很明显问题在于我的 json 文件中出现了回车或者换行符,也就是说整个 json 文件只能有一行。

这是修改之前的,可以利用这个正则表达式替换一下:\r|\n|\s
,虽然空格不影响,但还是一起删除了。
修改之后:
{"name":"ethan","age":18,"books":[{"bName":"java","price":80},{"bName":"js","price":60}]}
代码:
private static void readJson() throws IOException, JSONException {
BufferedReader bufferedReader = new BufferedReader(new FileReader("resources/test.json"));
String line = null;
while ((line = bufferedReader.readLine()) != null) {
JSONObject jsonObject = new JSONObject(line);
Iterator<String> keys = jsonObject.keys();
while ((keys.hasNext())) {
String key = keys.next();
System.out.println(key + ":" + jsonObject.get(key));
}
}
}
输出:
books:[{"bName":"java","price":80},{"bName":"js","price":60}]
name:ethan
age:18
这里只循环了一层,可以利用递归把每一项都读出来。以及一些增删改的操作可以参考这篇。
网友评论