簡體   English   中英

當程序打包為jar時,無法讀取文件並使用gson解析

[英]Fail to read file and parse with gson when the program packaged as jar

所以我正在使用json將一些數據存儲在txt文件中。 我用Gson來處理json。 該程序在日食中運行良好。 但是,當我將其包裝到罐子中時,出現了問題。

我首先做的(日食)是:

        String gsonStr = gson.toJson(masterShips);
        BufferedWriter writer = null;
        try {
            writer = new BufferedWriter(new FileWriter("D:\\master_ship.txt"));
            writer.write(gsonStr);
        } catch (IOException e) {
            System.err.println(e);
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    System.err.println(e);
                }
            }
        }

然后,我將.txt文件復制到eclipse並使用以下代碼讀取:

Scanner in = new Scanner(new FileReader("master_ship.txt"));

String str = in.nextLine();
Log.toDebug(str);
in.close();
JsonParser parser = new JsonParser();
JsonElement je = parser.parse(str);
JsonArray ja = je.getAsJsonArray();
for (int i=0; i<ja.size(); ++i) { 
    ... 
}

但是,當我將.jar文件和.txt文件放在同一文件夾中並執行時,會出現錯誤。 我認為定義路徑的方式可能存在問題。 最后我轉向絕對路徑:

Scanner in = new Scanner(new FileReader("D:\\master_ship.txt"));

不過,它在eclipse中效果很好,但是在使用jar時卻不能。 然后用命令行打開罐子:

Exception in thread "main" com.google.gson.JsonSyntaxException: com.google.gson.
stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malform
ed JSON at line 1 column 4
        at com.google.gson.JsonParser.parse(JsonParser.java:65)
        at com.google.gson.JsonParser.parse(JsonParser.java:45)
        at kan.util.Master.loadMasterShip(Master.java:44)
        at kan.util.Master.load(Master.java:27)
        at kan.Main.main(Main.java:22)
Caused by: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLeni
ent(true) to accept malformed JSON at line 1 column 4
        at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1505)
        at com.google.gson.stream.JsonReader.checkLenient(JsonReader.java:1386)
        at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:531)
        at com.google.gson.stream.JsonReader.peek(JsonReader.java:414)
        at com.google.gson.JsonParser.parse(JsonParser.java:60)
        ... 4 more

我可以確定文件讀取成功,因為jar可以完全輸出從文件讀取的字符串。 但是,為什么Gson在日食方面做得很好卻要在日食之外失敗。

它已成為一種 在這種情況下,必須通過URL而不是File訪問資源。 有關標簽的信息 ,請參見信息頁面 ,以了解形成URL

另請參見應用程序如何使用JAR中的文件進行讀寫?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM