我正在尝试从类中加载名为Test
的文件,但是Java却以某种方式说该文件不存在,尽管它显然存在,并且URL对象url
都不为null,也不存在。它包含无效路径,并且在调试程序时,文件对象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文件夹:
bin/
|___package/Test.class
|___Test
输出(项目称为“其他”):
File does not exist: file:\F:\Development\CoolDirectory\Other\bin\Test
答案 0 :(得分:1)
使用Test.class.getResource("/Test");
可能会造成很多麻烦,因为您永远不知道无法以某种方式直接访问资源是纯文件还是JAR文件内部。
因此,首选方法是使用getResourceAsStream(String)
,该方法返回可以直接读取的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();
}