Java 使用类路径创建文件实例

Java 使用类路径创建文件实例,java,file,nullpointerexception,classpath,getresource,Java,File,Nullpointerexception,Classpath,Getresource,我正在尝试将文件加载到项目中的文件实例中。在Eclipse中运行时,我可以这样做: File file = new File(path); 我想将我的项目导出到一个可运行的JAR,但它不再工作了。当我以Eclipse的方式执行时,Java抛出了一个NullPointerException。在谷歌搜索了几个小时后,我发现: File file = new File(ClassLoader.getSystemResource(path).getFile()); 但这并没有解决问题。我仍然得到相同

我正在尝试将文件加载到项目中的文件实例中。在Eclipse中运行时,我可以这样做:

File file = new File(path);
我想将我的项目导出到一个可运行的JAR,但它不再工作了。当我以Eclipse的方式执行时,Java抛出了一个
NullPointerException
。在谷歌搜索了几个小时后,我发现:

File file = new File(ClassLoader.getSystemResource(path).getFile());
但这并没有解决问题。我仍然得到相同的NullPointerException。以下是我需要此文件的方法:

private void mapLoader(String path) {
    File file = new File(ClassLoader.getSystemResource(path).getFile());
    Scanner s;
    try {
        s = new Scanner(file);
        while (s.hasNext()) {
            int character = Integer.parseInt(s.next());
            this.getMap().add(character);
        }
    } catch (FileNotFoundException e) {
        System.err.println("The map could not be loaded.");
    }
}
有没有办法用getResource()方法加载文件?或者我应该完全重写mapLoader方法吗

编辑: 我把我的方法改成这个,多亏了@madprogrammer,它才起作用

private void mapLoader(String path) {
    Scanner s = new Scanner(getClass().getResourceAsStream(path));
    while (s.hasNext()) {
        int character = Integer.parseInt(s.next());
        this.getMap().add(character);
    }
}
我正在尝试将文件加载到项目中的文件实例中

我想将我的项目导出到一个可运行的JAR,但它不再工作了

这表明您试图查找的文件嵌入在Jar文件中

所以简单的答案是,不要。使用
getClass().getResourceAsStream(路径)
并使用生成的
InputStream

嵌入式资源不是文件,而是存储在Jar(Zip)文件中的字节

你需要使用更像

private void mapLoader(String path) {
    try (Scanner s = new Scanner(getClass().getResourceAsStream(path)) {
        while (s.hasNext()) {
            int character = Integer.parseInt(s.next());
            this.getMap().add(character);
        }
    } catch (IOException e) {
        System.err.println("The map could not be loaded.");
        e.printStackTrace();
    }
}

我想我不明白你的意思。你有这样的建议吗?File File=新文件(getClass().getResourceAsStream(path));不,您不能再以
文件的形式访问资源了,我指的是更像
s=newscanner(getClass().getResourceAsStream(path))
。您无法想象像文件这样的嵌入式资源,它们根本不是,它们是Jar/Zip文件中的条目