java 項目中很重要的一步就是讀取配置文件,主要是 properties 和 xml 文件,json 文件沒見過,但覺得 json 文件和這兩個類似,就順便看了一下,前端最常用的配置文件不就一個 package.json 嘛。

image-20181110155441844
這是本文代碼的文件結構,很簡單。
需用用的的 jar 包

image-20181110160043613
網上很容易找到,如果找不到可以私信我。
讀取 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 文件
這里需要注意一下,我一開始運行的時候會報這個錯:

image-20181110161237694
查看源代碼:

image-20181110161448615

image-20181110161549422
很明顯問題在于我的 json 文件中出現了回車或者換行符,也就是說整個 json 文件只能有一行。

image-20181110161736268
這是修改之前的,可以利用這個正則表達式替換一下:\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
這里只循環(huán)了一層,可以利用遞歸把每一項都讀出來。以及一些增刪改的操作可以參考這篇。