![](/img/trans.png)
[英]Java access files in jar causes java.nio.file.FileSystemNotFoundException
[英]Unable to access the resources file in jar after packaging : FileSystemNotFoundException
嗨,我正在開發一個小型 Java 應用程序(對這個有點新),它接受一個輸入文件並給出一個網頁。 這里的 HTML 模板和網頁的圖像文件位於資源文件夾中。
下面是我在代碼中訪問 html 模板文件的方式。(我需要將 HTML 模板作為字符串讀取)
{
String htmlString;
ClassLoader classLoader = getClass().getClassLoader();
URL fileurl = classLoader.getResource("template.html");
htmlString = String.join("\n", Files.readAllLines(Paths.get(fileurl.toURI())));
}
當從 Eclipse 運行時,代碼工作正常,但當我將它作為 jar 運行時失敗。(java.nio.file.NoSuchFileException:) 請幫助我從資源文件夾訪問模板文件,並注意 html 從同一個文件夾。 現在模板和圖像文件必須打包並且應該能夠作為單個 JAR 運行。
更新:使用 7-zip 解壓縮 jar 文件以查看內容。 我可以看到資源中的文件可用於 jar
謝謝!
您已將所有內容打包到 jar 中,因此資源的路徑名不再是文件的有效路徑。 如果您添加了此日志記錄,您會看到 jar 條目的路徑類似於jar:file:/C:/path/to/your.jar!/template.html
,它不能被Files.readAllLines
打開:
URI uri = fileurl.toURI();
System.out.println("uri="+uri);
解決方案很簡單,只需將資源定位為InputStream
,它必須在類路徑上:
String htmlString;
ClassLoader classLoader = getClass().getClassLoader();
try(InputStream in = classLoader.getResourceAsStream("template.html")) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
in.transferTo(out);
htmlString = new String(out.toByteArray()); // as platform encoding
}
如果在分解目錄中運行代碼時res
目錄是類路徑的一部分,則此方法有效,如果“res”的內容在 jar 中,則此方法適用於 JAR 文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.