我的springboot專案(專案A)依賴于作為jar檔案的庫(庫B)(它也是我的專案,但在編譯專案A期間源代碼不存在)。在 jar 里面我有一個目錄 dir1 和一個檔案 file2。
專案結構:
- project A
-- src/main/java/com/test/ResourcesUtils.java
-- src/main/resources/dir1/file1
- library B
-- src/main/resources/dir1/file2
當我嘗試從專案 A 獲取資源時,一切正常,例如:
InputStream is1 = ResourcesUtils.class.getClassLoader().getResourceAsStream("dir1\\file1);
InputStream is2 = ResourcesUtils.class.getClassLoader().getResourceAsStream("dir1/file1);
(is1, is2) 兩者都不為空。
當我嘗試使用相同的方法從庫 B 獲取資源時,它不起作用
InputStream is1 = ResourcesUtils.class.getClassLoader().getResourceAsStream("dir1\\file2);
InputStream is2 = ResourcesUtils.class.getClassLoader().getResourceAsStream("dir1/file2);
變數 is1 為空,is2 不為空。
難道我做錯了什么?為什么它對來自主 jar 的資源與來自依賴 jar 的資源不同?
我不能只切換到第二個版本(使用'/',因為我沒有控制傳遞給 getResourceAsStream 的字串)
public static boolean existsInResource(Path path) {
try (InputStream is = ResourcesUtils.class.getClassLoader().getResourceAsStream(path.toString())) {
return is != null;
} catch (final IOException e) {
// handle exception
}
}
uj5u.com熱心網友回復:
當提到file1,它時,它是您的應用程式中的一個物理檔案,我假設您在 Windows 上運行您的代碼。該檔案file1位于 Windows 檔案系統中。
當提到 時file2,它位于 JAR 檔案中。那不是 windows 檔案系統,它是一個 JAR 檔案。
除非您知道該檔案是物理檔案,否則使用正斜杠會更安全。這\是 Windows NT 之前的舊 32 位視窗的殘留物。Windows NT 內部(我不確定我是否記錯了)使用/,而命令處理器僅使用\.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/455366.html
