解決JavaWeb讀取本地json文件以及亂碼的問(wèn)題
最近在開(kāi)發(fā)項(xiàng)目的時(shí)候遇到一個(gè)問(wèn)題,在myecilpes上使用googlede gson讀取項(xiàng)目中的json文件成功,然后把項(xiàng)目發(fā)布到tomcat上再使用同樣的方法,會(huì)提示“系統(tǒng)找不到指定的路徑”
文件放在src/config/下
JsonParser parser = new JsonParser();
JsonObject object = (JsonObject) parser.parse(new FileReader("config/Test.json"));
在找了許多文章以后,發(fā)現(xiàn)問(wèn)題應(yīng)該是,發(fā)布到服務(wù)器之后,讀取文件的相對(duì)路徑并不能尋找到文件,所以只能使用絕對(duì)路徑,找到在tomcat的 webapps下的項(xiàng)目Test
路徑是
D:\Program Files\Tomcat 8.0\webapps\Test\WEB-INF\classes\Test.json
修改讀取路徑之后可以讀取到j(luò)son文件,以下是通過(guò)單獨(dú)的Java類中獲得絕對(duì)路徑方法,因?yàn)槲募A中有空格,所以我把其中空格部分被改變的進(jìn)行替換
String path = JsonUtil.class.getClassLoader().getResource("/Test.json").getPath().replace("%20", " ");
JsonParser parser = new JsonParser();
JsonObject object = (JsonObject) parser.parse(new FileReader(path ));
但是這樣讀取出來(lái)的內(nèi)容卻是亂碼的,原因可能是系統(tǒng)編碼格式和編譯器的編碼格式不一致,所以我改用流的方式讀取文件
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import com.google.gson.JsonArray;
import com.google.gson.JsonIOException;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;
/**
* @author LK
*/
public class JsonUtil {
/**
* 讀取本地json文件,獲取json格式字符串
* @return
*/
public static String getJsonString(){
String path = JsonUtil.class.getClassLoader().getResource("/Test.json").getPath().replace("%20", " ");
File file = new File(path);
try {
FileReader fileReader = new FileReader(file);
Reader reader = new InputStreamReader(new FileInputStream(file),"utf-8");
int ch = 0;
StringBuffer sb = new StringBuffer();
while ((ch = reader.read()) != -1) {
sb.append((char) ch);
}
fileReader.close();
reader.close();
String jsonString = sb.toString();
return jsonString;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
然后再把獲取到的json格式的String進(jìn)行解析
String jsonString = JsonUtil.getJsonString();
JsonParser parser = new JsonParser();
JsonObject object = (JsonObject) parser.parse(jsonString);
這樣就可以獲取到正確的JsonObject
以上這篇解決JavaWeb讀取本地json文件以及亂碼的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用JDBC連接Mysql 8.0.11出現(xiàn)了各種錯(cuò)誤的解決
這篇文章主要介紹了使用JDBC連接Mysql 8.0.11出現(xiàn)了各種錯(cuò)誤的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Java中StringBuilder字符串類型的操作方法及API整理
Java中的StringBuffer類繼承于AbstractStringBuilder,用來(lái)創(chuàng)建非線程安全的字符串類型對(duì)象,下面即是對(duì)Java中StringBuilder字符串類型的操作方法及API整理2016-05-05
如何使用Idea搭建全注解式開(kāi)發(fā)的SpringMVC項(xiàng)目
這篇文章主要介紹了如何使用Idea搭建全注解式開(kāi)發(fā)的SpringMVC項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
Springboot項(xiàng)目中運(yùn)用vue+ElementUI+echarts前后端交互實(shí)現(xiàn)動(dòng)態(tài)圓環(huán)圖(推薦)
今天給大家?guī)?lái)一篇教程關(guān)于Springboot項(xiàng)目中運(yùn)用vue+ElementUI+echarts前后端交互實(shí)現(xiàn)動(dòng)態(tài)圓環(huán)圖的技能,包括環(huán)境配置及圓環(huán)圖前端后端實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧2021-06-06
JavaWeb的監(jiān)聽(tīng)器和過(guò)濾器你了解嗎
這篇文章主要為大家詳細(xì)介紹了JavaWeb的監(jiān)聽(tīng)器和過(guò)濾器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02
SpringBoot中的PropertySource原理詳解
這篇文章主要介紹了SpringBoot中的PropertySource原理詳解,PropertySource?是一個(gè)非常重要的概念,它允許您在應(yīng)用程序中定義屬性,并將這些屬性注入到?Spring?環(huán)境中,需要的朋友可以參考下2023-07-07
關(guān)于weblogic部署Java項(xiàng)目的包沖突問(wèn)題的解決
這篇文章主要介紹了關(guān)于weblogic部署Java項(xiàng)目的包沖突問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
探究MyBatis插件原理以及自定義插件實(shí)現(xiàn)
這篇文章主要介紹了探究MyBatis插件原理以及自定義插件實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07

