[英]Cannot read resource from jar
我有以下前綴:
String prefix = TemplatesReader.class.getClassLoader().getResource("templates/").getPath();
並且有方法
public byte[] read(String pathToTemplate) {
return Files.readAllBytes(Paths.get(prefix + pathToTemplate));
}
在 intellij idea 中可以正常工作,但是在啟動 jar 時會發生錯誤:
java.nio.file.NoSuchFileException: file:/app.jar./BOOT-INF/classes!/templates/request-orders/unmarked/RequestOrderUnmarked.pdf
您不能假定資源是文件。 當資源在.jar文件中時,它是.jar文件的一部分; 它根本不再是一個單獨的文件。
您不能使用文件或路徑來讀取資源。
不能使用 URL 的 getPath() 方法。 它不返回文件名。 它只返回 URL 的路徑部分(即 URL 的方案/權限與其查詢部分之間的所有內容),這根本不是文件路徑。
相反,使用getResourceAsStream讀取資源:
private static final String RESOURCE_PREFIX = "/templates/";
public byte[] read(String pathToTemplate)
throws IOException {
try (InputStream stream = TemplatesReader.class.getResource(
RESOURCE_PREFIX + pathToTemplate)) {
return stream.readAllBytes();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.