我希望我的jar文件能够从自身访问一些文件。我知道如何为[0]
执行此操作,但这对其他文件不起作用。我想要的是从我的罐子里提取一些拉链。我在eclipse中创建了一个类文件夹,将拉链放入并使用
BufferedImage
获取 public File getResFile(String name){
return new File(getClass().getResource(name).getFile());
}
实例并将其解压缩。它在eclipse中运行良好,但只要我将它导出到一个罐子里就可以了
File
我正在努力解决这个问题,已经有6个小时了,无法找到解决方案。请帮忙!
答案 0 :(得分:2)
getResource()
返回URL
而不是File
的原因有一个原因,因为该资源可能 一个文件,并且因为您的代码包装在Jar文件中,它不是文件而是zip条目。
阅读资源内容的唯一安全方式是InputStream
,可以通过调用getResourceAsStream()
或在返回的openStream()
上调用URL
。 / p>
答案 1 :(得分:1)
使用其中一种方法,来自班级Class - getResource(java.lang.String) - getResourceAsStream(java.lang.String)
this.getClass().getResource(name);
this.getClass().getResourceAsStream(name);
警告:默认情况下,它会从包中找到this.class
的位置加载文件。因此,如果从类org.organisation.project.App
使用它,则该文件需要位于目录org/organisation/project
中的jar内。如果文件位于jar中的根目录或其他目录中,请使用文件名中的/
in。与/data/names.json
一样。
答案 2 :(得分:1)
首先使用java System.out.println("classpath is: " + System.getProperty("java.class.path"));
检查您的类路径,看看类路径是否包含您的jar文件。
然后使用getclass()。classloader.getResourceAsStream(name)。查看返回的URL是否正确。调用URL上的方法isFile()来检查URL是否实际上是一个文件。然后调用getFile()方法。
答案 3 :(得分:1)
使用Spring的 PathMatchingResourcePatternResolver ;
它可以解决从IDE或文件系统启动软件包的问题:
public List<String> getAllClassesInRunningJar() throws Exception {
try {
List<String> list = new ArrayList<String>();
// Get all the classes inside the package com.my.package:
// This will do the work for both launching the package from an IDE or from the file system:
String scannedPackage = "com.my.package.*";
// This is spring - org.springframework.core; use these imports:
// import org.springframework.core.io.Resource;
// import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
PathMatchingResourcePatternResolver scanner = new PathMatchingResourcePatternResolver();
Resource[] resources = scanner.getResources(scannedPackage.replace(".", "/"));
for (Resource resource : resources)
list.add(resource.getURI().toString());
return list ;
} catch (Exception e) {
throw new Exception("Failed to get the classes: " + e.getMessage(), e);
}
}