java - 使用 Java 的 getResource 找不到文件
问题描述
我正在尝试加载Test
从我的类中调用的文件,但不知何故 Java 说,该文件不存在,而它显然存在,并且 URL 对象既不url
为空也不包含无效路径,当我调试程序时,文件对象file
中存储了正确的路径。当我打印出来file.getPath()
并将其粘贴到 Windows 资源管理器中时,它打开得很好。我正在运行 Eclipse,但我尝试在控制台中运行该程序,但它也不起作用。
public static void main(String[] args) {
URL url = Test.class.getResource("/Test");
File file = new File(url.toExternalForm());
if (!file .exists()) {
System.out.println("File does not exist: " + file.getPath());
System.exit(-1);
}
}
我用getResource("Test")
,File("Test")
也试过了File("/Test")
,但也没有用。我不知道为什么会发生这种情况,因为我经常处理文件并且从来没有遇到过问题。
我要加载的文件位于源文件夹中,是的,我检查过,它在 Eclipse 中被识别为源文件夹并且位于类路径中。顺便说一句,该文件实际上只是在Test
没有扩展名的情况下调用。
斌文件夹:
bin/
|___package/Test.class
|___Test
输出(项目称为“其他”):
File does not exist: file:\F:\Development\CoolDirectory\Other\bin\Test
解决方案
使用Test.class.getResource("/Test");
可能会导致很多麻烦,因为您永远不知道资源是普通文件还是 JAR 文件内部无法直接访问。
因此,首选方法是使用getResourceAsStream(String)
which 返回可以直接读取的 InputStream。
以下示例使用 Java 9+ 特色功能:
byte[] data = null;
try (InputStream in = Test.class.getResourceAsStream("/Test")) {
if (in == null) {
System.out.println("Resource '/Test' does not exist");
System.exit(-1);
}
data = in.readAllBytes();
}
推荐阅读
- format - 这是什么条形码格式?
- svg - 跨平台安全使用的 SVG 字体
- python - 列表中是否使用了自引用列表或循环引用,例如。将列表附加到自身
- python - 模拟调用另一个方法的方法
- reactjs - react-native-router-flux Actions.{key} 无法识别并在调用时导致错误
- rest - 从客户端的角度看幂等键
- c# - Specflow - 场景大纲测试被忽略
- python - 使用来自另一列的滚动值的数据框百分位数
- javascript - 接受来自 javascript 的 Jquery.post 和 Python 的 request.post 的 json
- javascript - React JSX 错误期望在箭头函数的末尾有一个返回值