1 回答
TA贡献1752条经验 获得超4个赞
最有可能的问题是:
new File(classLoader.getResource(fileLocation).getFile());
URL 类的 getFile() 方法不返回有效的文件名。它只返回 URL 的路径部分,不能保证它是有效的文件名。(当 URL 类作为 Java 1.0 的一部分被引入时,方法名称是有意义的,因为几乎所有 URL 实际上都引用了物理文件,无论是在同一台机器上还是在不同的机器上。)
ClassLoader.getResource 的参数不是文件名。它是一个相对 URL,其基础是 ClassLoader 的类路径中的每个位置。如果要读取与应用程序捆绑在一起的资源,请不要尝试将资源 URL 转换为文件。将 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);
}
}
如果您想读取不属于您的应用程序的文件,请根本不要使用 getResource。只需创建一个 File 实例。
添加回答
举报