我正在嘗試在資源檔案夾中使用 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);
}
}
}
這似乎不起作用。我究竟做錯了什么?
uj5u.com熱心網友回復:
我正在嘗試在資源檔案夾中使用 GSON 撰寫 JSON 檔案
嗯,那是你的問題。因為那是完全不可能的。
“資源”檔案夾僅存在于開發人員的計算機上。因此,你不能寫一個不存在的東西。
資源檔案夾僅用于只讀資源。想想表格資料檔案(例如,國家名稱和電話號碼前綴串列)、圖示檔案、HTML 模板,諸如此類的業務。
您只能GsonRepository.class.getResource使用和 ( )加載這些檔案.getResourceAsStream- 任何將它們視為檔案的嘗試都將在開發期間作業,然后在部署時失敗。
如果您有組態檔或保存檔案,這些檔案不會進入資源檔案夾,根本不會加載.getResource。你應該把它們放在用戶的主目錄System.getProperty("user.home")( , 配置錯誤。不過,開始將用戶可編輯的資料檔案粘貼到應用程式的安裝目錄中并不是一個好主意!)
new FileWriter(this.getClass().getResource
這沒有意義。在 java 中,File表示檔案。并且資源不是檔案——例如,jar 檔案中的條目不是檔案。但是,資源往往是 jar 檔案中的條目。
請注意,它是YourClass.class.getResource,不是.getClass().getResource- 后者在您子類化時可能會中斷,前者永遠不會中斷,因此在各個方面都優越。當有兩種方法可以做一件在可讀性上幾乎相同的事情,并且一種比另一種更適用于嚴格的場景時,那么永遠不要使用另一種。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/480293.html
上一篇:逗號后洗掉不同小數位的復雜函式
