簡體   English   中英

如何在不使用 src/main/resources 的情況下在資源文件夾中使用 GSON 編寫 JSON 文件?

[英]How do I write a JSON file using GSON in the resources folder without using src/main/resources?

我正在嘗試在資源文件夾中使用 GSON 編寫 JSON 文件,而不使用 src/main/resources:

package repository;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import org.tinylog.Logger;

import java.io.*;
import java.util.List;

public class GsonRepository<T> extends Repository<T> {

    private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();

    public GsonRepository(Class<T> elementType) {
        super(elementType);
    }

    public void saveToFile(String resourceName) throws IOException {
        try (var writer = new FileWriter(this.getClass().getResource(resourceName).getPath())) {
            GSON.toJson(elements, writer);
        }
    }
}

這似乎不起作用。 我究竟做錯了什么?

我正在嘗試在資源文件夾中使用 GSON 編寫 JSON 文件

嗯,那是你的問題。 因為那是完全不可能的。

“資源”文件夾僅存在於開發人員的計算機上。 因此,你不能寫一個不存在的東西。

資源文件夾僅用於只讀資源。 想想表格數據文件(例如,國家名稱和電話號碼前綴列表)、圖標文件、HTML 模板,諸如此類的業務。

只能使用GsonRepository.class.getResource和 ( .getResourceAsStream ) 加載這些文件 - 任何將它們視為文件的嘗試都將在開發期間工作,然后在部署時失敗。

如果您有配置文件或保存文件,這些文件不會進入資源文件夾,根本不會加載.getResource 您應該將它們放在用戶的主目錄中( System.getProperty("user.home") ):安裝 java 應用程序的目錄將不能由應用程序本身寫入(或者如果是,您的配置非常糟糕出於安全目的的操作系統。當然,Windows 的配置很糟糕。不過,開始將用戶可編輯的數據文件粘貼到應用程序的安裝目錄中並不是一個好主意!)

new FileWriter(this.getClass().getResource

這沒有意義。 在 java 中, File表示文件 並且資源不是文件——例如,jar 文件中的條目不是文件。 但是,資源往往是 jar 文件中的條目。

請注意,它是YourClass.class.getResource ,而不是.getClass().getResource - 后者在您子類化時可能會中斷,前者永遠不會中斷,因此在各個方面都比較優越。 當有兩種方法可以做一件在可讀性上幾乎相同的事情,並且一種比另一種更適用於嚴格的場景時,那么永遠不要使用另一種。

暫無
暫無

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

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