Java 有没有一种方法可以使用ClassLoader和getClass()方法从res文件夹获取文件

Java 有没有一种方法可以使用ClassLoader和getClass()方法从res文件夹获取文件,java,getfiles,Java,Getfiles,我有获取图像的loadImage功能。仅当我试图从getFile()函数获取文件时,它才不起作用 public BufferedImage loadImage(String img) { BufferedImage bimg = null; try { bimg = ImageIO.read(new File("res/" + img)); } catch (Exception e1) { try { bimg =

我有获取图像的
loadImage
功能。仅当我试图从
getFile()
函数获取文件时,它才不起作用

public BufferedImage loadImage(String img) {
    BufferedImage bimg = null;
    try {
        bimg = ImageIO.read(new File("res/" + img));
    } catch (Exception e1) {
        try {
            bimg = ImageIO.read(ClassLoader.getSystemResource("res/" + img));
        } catch (Exception e2) {
            try {
                bimg = ImageIO.read(getClass().getResource("res/" + img));
            } catch (Exception e3) {
                System.out.println("Cannot load image: " + img);
            }
        }
    }
    return bimg;
}
我已尝试使用以下功能:

public File getFile(String file) {
    File f = null;
    try {
        f = new File("res/" + file);
    } catch (Exception e1) {
        try {
             f = new File(ClassLoader.getSystemResource("res/" + file).getFile());
        } catch (Exception e2) {
            try {
                f = new File(getClass().getResource("res/" + file).getFile());
            } catch (Exception e3) {
                System.out.println("Cannot load File: " + file);
            }
        }
    }
    return f;
}
这些函数位于jar库中,我的另一个项目希望从jar库中获取一个文件

这是在我的项目中尝试从jar库获取config.cfg文件

File file = files.getFile("config.cfg");

我已经打开了jar并检查了文件是否存在于jar中。

这取决于您的包装

请记住,您不必将应用程序打包为jar文件—它可以是未打包的形式,在单独的目录中包含类(就像在jar文件中一样,但没有它)

在Java中获取
文件
就像在运行应用程序的操作系统中获取文件一样。因此,如果您有一个“非jar”表单,那么您的代码就可以正常工作。但如果您有一个JAR应用程序,那么您的操作系统就必须支持对打包文件(JAR实际上是ZIP存档)的操作,就像对未打包文件的操作一样。然而,我对这种情况一无所知

总而言之,从资源(应用程序的jar文件)获取文件将不起作用,因为它应该允许本机文件系统执行普通文件所允许的所有操作(复制、粘贴、写入、更改属性等)。以流的形式获取资源是单独的事情(在所有情况下都可以)

编辑: 根据您的评论,您有一个
JAR
表单。在这种情况下,从资源中以
file
的形式获取文件根本不起作用。

您可以使用该类。。例如,如果jar文件中有
“/data/config.cfg”
,则可以使用以下行打开该文件进行读取:

InputStream is = this.getClass().getResourceAsStream("/data/config.cfg");

糟糕的异常捕获当我得到它给我这个文件的路径时:/C:/Users/8803286/Dropbox/Workspace/Eclipse/Programs/Sinx%20Core/build/jar/SinxCore.jar/res/config.cfg但是让图像工作为什么让文件不工作?这就是为什么我使用try语句如果新文件()无法获得文件,那么它将转到下一个文件