我想在我的Java项目的资源文件夹中读取该文件。我使用了以下代码
MyClass.class.getResource("/myFile.xsd").getPath();
我想检查文件的路径。但它提供了以下路径
file:/home/malintha/.m2/repository/org/wso2/carbon/automation/org.wso2.carbon.automation.engine/4.2.0-SNAPSHOT/org.wso2.carbon.automation.engine-4.2.0-SNAPSHOT.jar!/myFile.xsd
我在maven存储库依赖项中获取文件路径,但它没有获取该文件。我怎么能这样做?
答案 0 :(得分:4)
您需要提供res
文件夹的路径。
MyClass.class.getResource("/res/path/to/the/file/myFile.xsd").getPath();
答案 1 :(得分:3)
您的资源目录是否在类路径中?
您的路径中没有包含资源目录:
MyClass.class.getResource("/${YOUR_RES_DIR_HERE}/myFile.xsd").getPath();
答案 2 :(得分:1)
从资源文件夹构造File实例的一种可靠方法是将资源作为流复制到临时文件中(临时文件将在JVM退出时删除):
public static File getResourceAsFile(String resourcePath) {
try {
InputStream in = ClassLoader.getSystemClassLoader().getResourceAsStream(resourcePath);
if (in == null) {
return null;
}
File tempFile = File.createTempFile(String.valueOf(in.hashCode()), ".tmp");
tempFile.deleteOnExit();
try (FileOutputStream out = new FileOutputStream(tempFile)) {
//copy stream
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
}
return tempFile;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
答案 3 :(得分:0)
无法访问其他maven模块的资源。因此,您需要在src/main/resources
或src/test/resources
文件夹中提供您的资源myFile.xsd。
答案 4 :(得分:0)
路径是正确的,虽然不在文件系统上,但在jar中。也就是说,因为罐子正在运行。资源永远不会保证是文件。
但是,如果您不想使用资源,可以使用 zip文件系统。但是Files.copy
就足以将文件复制到jar之外了。修改文件里面 jar是一个坏主意。更好地将资源用作"模板"在用户的家(子)目录(System.getProperty("user.home")
)中制作初始副本。
答案 5 :(得分:0)
在maven项目中,假设有一个名为“ config.cnf ”的文件,它的位置在下面。
/src
/main
/resources
/conf
config.cnf
在IDE(Eclipse)中,我使用ClassLoader.getResource(..)方法访问此文件,但是如果我使用jar运行此应用程序,则总是遇到“找不到文件”异常。最后,我编写了一种方法,通过查看应用程序的工作位置来访问文件。
public static File getResourceFile(String relativePath)
{
File file = null;
URL location = <Class>.class.getProtectionDomain().getCodeSource().getLocation();
String codeLoaction = location.toString();
try{
if (codeLocation.endsWith(".jar"){
//Call from jar
Path path = Paths.get(location.toURI()).resolve("../classes/" + relativePath).normalize();
file = path.toFile();
}else{
//Call from IDE
file = new File(<Class>.class.getClassLoader().getResource(relativePath).getPath());
}
}catch(URISyntaxException ex){
ex.printStackTrace();
}
return file;
}
如果通过发送“ conf / config.conf ”参数调用此方法,则可以从jar和IDE中访问该文件。