最近在開發項目的時候遇到一個問題,在myecilpes上使用googlede gson讀取項目中的json檔案成功,然後把項目釋出到tomcat上再使用同樣的方法,會提示“系統找不到指定的路徑”
檔案放在src/config/下
JsonParser parser = new JsonParser();
JsonObject object = (JsonObject) parser.parse(new FileReader("config/Test.json"));
在找了許多文章以後,發現問題應該是,釋出到伺服器之後,讀取檔案的相對路徑并不能尋找到檔案,是以隻能使用絕對路徑,找到在tomcat的 webapps下的項目Test
路徑是
D:\Program Files\Tomcat 8.0\webapps\Test\WEB-INF\classes\Test.json
修改讀取路徑之後可以讀取到json檔案,以下是通過單獨的Java類中獲得絕對路徑方法,因為檔案夾中有空格,是以我把其中空格部分被改變的進行替換
String path = JsonUtil.class.getClassLoader().getResource("/Test.json").getPath().replace("%20", " ");
JsonParser parser = new JsonParser();
JsonObject object = (JsonObject) parser.parse(new FileReader(path ));
但是這樣讀取出來的内容卻是亂碼的,原因可能是系統編碼格式和編譯器的編碼格式不一緻,是以我改用流的方式讀取檔案
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 = ;
StringBuffer sb = new StringBuffer();
while ((ch = reader.read()) != -) {
sb.append((char) ch);
}
fileReader.close();
reader.close();
String jsonString = sb.toString();
return jsonString;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
然後再把擷取到的json格式的String進行解析
String jsonString = JsonUtil.getJsonString();
JsonParser parser = new JsonParser();
JsonObject object = (JsonObject) parser.parse(jsonString);
這樣就可以擷取到正确的JsonObject