找不到使用 ClassLoader.getSystemResource(“file.txt”) 访问的 src\resources 中的文件的文件

File not found for file in src\resources accessed with ClassLoader.getSystemResource("file.txt")

提问人:Hack-R 提问时间:9/18/2016 最后编辑:Hack-R 更新时间:9/18/2016 访问量:546

问:

我正在尝试访问我的 Java Netbeans 项目中的文本文件,但我总是找不到文件。

请注意,我尝试使用“src\ ....”、“resources\ ...”指定文件,并且仅使用文件名。

这是我的代码:

static class Task extends TimerTask {
    // Load the directory as a resource
    URL dir_url = ClassLoader.getSystemResource("word_list_moby_credits.txt");
    // Turn the resource into a File
    File f = new File(dir_url.getFile());

    Scanner scanner = new Scanner(f);

我得到了

未找到文件

在上面代码的最后一行。

这是我的项目:

enter image description here

enter image description here

爪哇岛

评论

0赞 jlewkovich 9/18/2016
一个好的第一步是检查并确保它与文件的实际位置匹配。dir_url
0赞 Hack-R 9/18/2016
@JLewkovich谢谢。所以我的意思是该文件在上面屏幕截图中的项目目录中。我手动把它放在那里。在您发表评论后,我再次检查以确保它仍然存在。
0赞 jlewkovich 9/18/2016
我的意思是调试代码并在运行时进行检查,并确保它与您手动放置文件的位置匹配URL dir_url
0赞 Hack-R 9/18/2016
@JLewkovich 哦,我明白了,谢谢。是的,我现在就这样做。

答:

2赞 Tho 9/18/2016 #1

请尝试阅读{源包}/资源中的单词.txt:

public static void main(String[] args) {
    try{
        URL url = Task.class.getResource("/resources/words.txt");
        Scanner scanner = new Scanner(url.openStream());
        System.out.println("" + scanner.next());
    } catch(IOException ex) {
        ex.printStackTrace();
    }
}

如果您已经有其他 main 方法,但仍希望将此代码保留在方法之外,则可以将其包装在静态块中:

static class Task extends TimerTask {
   static {
        try {
            URL url = Task.class.getResource("/resources/words.txt");
            Scanner scanner = new Scanner(url.openStream());
            System.out.println("" + scanner.next());
        } catch (IOException ex) {
            ex.printStackTrace();
        }
   }
}

评论

0赞 Hack-R 9/18/2016
谢谢。如果我只是使用这种方式用我的代码引用文件,那么我会得到同样的错误。如果我用这个代码块替换我的代码,IDE 会告诉我有一个未报告的异常 IOException,并且不会给我一个自动修复它的选项。
0赞 Tho 9/18/2016
您可以将此代码包装在 try {} catch(Exeption e) {} 块中。我已经在我的 Netbeans 上运行了这段代码,它工作正常。
0赞 Hack-R 9/18/2016
谢谢。不知道为什么 Netbeans 仍然不喜欢它:imgur.com/a/6yHhG
0赞 Tho 9/18/2016
您必须将此代码放在以下方法中:public static void main(String[] args) {}。请再次查看我的更新。