天天看點

JavaWeb讀取本地json檔案以及亂碼問題解決

最近在開發項目的時候遇到一個問題,在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