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语句如果新文件()无法获得文件,那么它将转到下一个文件