我有获取图片的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 lib中,而我的其他项目想从jar lib中获取文件。
这是我的项目试图从jar lib
获取config.cfg文件File file = files.getFile("config.cfg");
我已打开jar并检查,如果该文件存在于jar中。
答案 0 :(得分:1)
您可以使用班级。getResourceAsStream(String name)。例如,如果jar文件中有"/data/config.cfg"
,那么您可以使用以下行打开该文件进行读取:
InputStream is = this.getClass().getResourceAsStream("/data/config.cfg");
答案 1 :(得分:0)
这取决于你的包装。
请记住,您不必将应用程序打包为jar文件 - 它可以是非打包形式,包含分隔目录中的类(就像在jar文件中但没有它)。
在Java中获取File
就像在运行应用程序的操作系统中获取文件一样。所以如果你有一个“非jar”形式,那么你的代码就可以了。但是如果你有一个JAR应用程序,那么你的操作系统必须支持对打包文件(jar实际上是ZIP存档)的操作,就像在未打包的文件上一样。但是,我不知道这种情况。
总而言之 - 从资源(从应用程序的jar文件)获取文件将不起作用,因为它应该允许本机文件系统执行普通文件允许的所有操作(复制,粘贴,写入,更改)属性等)。获取资源作为流是独立的事情(并且它将适用于所有情况)。
修改强>
根据您的评论,您有JAR
表单。在这种情况下,从资源获取文件File
根本不起作用。