用Java的getResource找不到文件

时间:2019-08-26 11:21:32

标签: java file

我正在尝试从类中加载名为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

1 个答案:

答案 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();
    }