java讀取json文件的2種方式例子
1 背景介紹
研發(fā)過(guò)程中,經(jīng)常會(huì)涉及到讀取配置文件等重復(fù)步驟,也行是.conf文件,也許是.json文件,但不管如何他們最終都需要進(jìn)入到j(luò)ave的inputStream里面。下面以讀取.json文件為例
2 FileInputStream讀取
需要1個(gè)參數(shù):
- fileName: 文件名,一般為絕對(duì)路徑,不然可能會(huì)找不到。或者和java文件同一個(gè)路徑下
static String readWithFileInputStream(){ String jsonString; //System.getProperty("user.dir")為獲取根目錄 //File.separator為不同操作系統(tǒng)的分隔符,linux和win是不一樣的 //tempFilePath該字符串里面為我們配置文件的路徑 String fileName = "xx_config.json"; // String tempFilePath = System.getProperty("user.dir") + File.separator + "resource" + File.separator + fileName; // System.out.print(tempFilePath); StringBuilder sb = new StringBuilder(); try{ InputStream input = new FileInputStream(fileName); byte[] buffer = new byte[1024]; int length = 0; length = input.read(buffer); while(length != -1){ sb.append(new String(buffer, 0 , length)); length = input.read(buffer); } }catch (Exception e){ e.printStackTrace(); } return jsonString = sb.toString(); }
最終返回一個(gè)String。然后通過(guò)JSON工具就可以轉(zhuǎn)為自己想讀取到模型啦。
TargetConfig config = (TargetConfig) JSON.parseObject(jsonString, TargetConfig.class);
但該種方式不靈活,需要把路徑寫死,或者寫成絕對(duì)路徑。
3 ClassLoader讀取
需要2個(gè)參數(shù):
- fileName: 文件名
- ClassLoader: 類加載器,一般為當(dāng)前類
static String readWithClassLoader() throws IOException { String fileName = "xx_config.json"; ClassLoader classLoader = TargetConfig.class.getClassLoader(); BufferedReader reader = null; InputStream inputStream = classLoader.getResourceAsStream(fileName); reader = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder content = new StringBuilder(); String line = reader.readLine(); while (!StringUtil.isEmpty(line)) { content.append(line); line = reader.readLine(); } return content.toString(); }
和之前一樣,最終返回一個(gè)String。然后通過(guò)JSON工具就可以轉(zhuǎn)為自己想讀取到模型啦。
TargetConfig config = (TargetConfig) JSON.parseObject(jsonString, TargetConfig.class);
但使用類加載讀取,可以不用寫死路徑。比第一種要靈活很多。
總結(jié)
到此這篇關(guān)于java讀取json文件的2種方式的文章就介紹到這了,更多相關(guān)java讀取json文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何基于SpringSecurity的@PreAuthorize實(shí)現(xiàn)自定義權(quán)限校驗(yàn)方法
spring Security提供有若干個(gè)過(guò)濾器,它們能夠攔截Servlet請(qǐng)求,并將這些請(qǐng)求轉(zhuǎn)給認(rèn)證和訪問(wèn)決策管理器處理,從而增強(qiáng)安全性,下面這篇文章主要給大家介紹了關(guān)于如何基于SpringSecurity的@PreAuthorize實(shí)現(xiàn)自定義權(quán)限校驗(yàn)方法的相關(guān)資料,需要的朋友可以參考下2023-03-03SpringBoot整合Gson 整合Fastjson的實(shí)例詳解
這篇文章主要介紹了SpringBoot整合Gson 整合Fastjson的實(shí)例詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11java利用Tabula實(shí)現(xiàn)對(duì)PDF內(nèi)表格數(shù)據(jù)提取
Tabula是一個(gè)開(kāi)源工具,用于從PDF文檔中提取表格數(shù)據(jù),下面小編就來(lái)和大家詳細(xì)介紹一下java如何通過(guò)Tabula對(duì)PDF文件內(nèi)表格進(jìn)行數(shù)據(jù)提取吧2023-09-09Struts2學(xué)習(xí)筆記(5)-參數(shù)傳遞方法
本文主要介紹Struts2中參數(shù)傳遞方法,希望能給大家做一個(gè)參考。2016-06-06Spring boot整合Mybatis-plus過(guò)程解析
這篇文章主要介紹了Spring boot整合Mybatis-plus過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03MybatisPlus保存、讀取MySQL中的json字段失敗問(wèn)題及解決
這篇文章主要介紹了MybatisPlus保存、讀取MySQL中的json字段失敗問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07SpringMVC源碼之HandlerMapping處理器映射器解析
這篇文章主要介紹了SpringMVC源碼之HandlerMapping處理器映射器解析,在Spring?MVC中,HandlerMapping處理器映射器用于確定請(qǐng)求處理器對(duì)象,請(qǐng)求處理器可以是任何對(duì)象,只要它們使用了@Controller注解或注解@RequestMapping,需要的朋友可以參考下2023-08-08