1 回答

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
最有可能的問(wèn)題是:
new File(classLoader.getResource(fileLocation).getFile());
URL 類的 getFile() 方法不返回有效的文件名。它只返回 URL 的路徑部分,不能保證它是有效的文件名。(當(dāng) URL 類作為 Java 1.0 的一部分被引入時(shí),方法名稱是有意義的,因?yàn)閹缀跛?URL 實(shí)際上都引用了物理文件,無(wú)論是在同一臺(tái)機(jī)器上還是在不同的機(jī)器上。)
ClassLoader.getResource 的參數(shù)不是文件名。它是一個(gè)相對(duì) URL,其基礎(chǔ)是 ClassLoader 的類路徑中的每個(gè)位置。如果要讀取與應(yīng)用程序捆綁在一起的資源,請(qǐng)不要嘗試將資源 URL 轉(zhuǎn)換為文件。將 URL 作為 URL 讀取:
public class TestFileUtil {
private static final ClassLoader classLoader = TestFileUtil.class.getClassLoader();
public static Map<String, Object> getJsonFileAsMap(String fileLocation) {
try {
return new ObjectMapper().readValue(getTestFile(fileLocation), HashMap.class);
} catch (IOException e) {
throw new RuntimeException("Error converting JSON file to a Map", e);
}
}
private static URL getTestFile(String fileLocation) {
return classLoader.getResource(fileLocation);
}
}
如果您想讀取不屬于您的應(yīng)用程序的文件,請(qǐng)根本不要使用 getResource。只需創(chuàng)建一個(gè) File 實(shí)例。
添加回答
舉報(bào)