我有一个类,其构造函数接收相对资源路径(语言属性文件)和相应的类加载器(路径相对于classLoader的包):
public Language(String relDir, ClassLoader classLoader) {
...
}
在该类中,我有一个加载所有找到的资源文件的方法(属性文件,如MyFile_en_GB.properties),并且它不知道预先有多少语言资源。它使用 languagesDir 作为查找资源的绝对路径。
private void loadLanguages() {
DirectoryStream.Filter<Path> filter = (path) -> {
return Files.isRegularFile(path) & path.getFileName()toString().startsWith("MyFile");
};
try (DirectoryStream<Path> stream = Files.newDirectoryStream(languagesDir, filter)) {
for (Path entry : stream) {
String fileName = entry.getFilename().toString();
...
loadPropertiesFile(filename)
}
} catch (..) {}
}
在那里,languagesDir使用绝对路径。但是,当我尝试时:
String dir = classLoader.getResource(relDir).toString();
它会引发异常。我想这是因为它需要一个文件,而不是一个目录
如何获得资源的绝对路径?我应该尝试另一种方法,只使用相对路径(如何做到这一点)?
编辑:关于例外:
classLoader.getResource(relDir)
提供空网址
答案 0 :(得分:0)
尝试在将URL更改为文件后使用resourceFile.getName()。
URL resourceURL = classLoader.getResource(..);
File resourceFile = new File(new URL(resourceURL).toURI());
String fullPath = resourceFile.getName();
答案 1 :(得分:0)
它会引发异常。我想这是因为它需要一个文件和 不是目录
如果是这种情况,您可以提供文件而不是目录。要获得绝对路径,请尝试如下
String dirPath = "C:\\Softwares";
File dir = new File( dirPath );
for ( String fileName : dir.list() ) {
File file = new File( dirPath + "\\" + fileName );
if ( file.isFile() ) {
// System.out.println( file.getAbsolutePath() );
String dir = classLoader.getResource( file.getAbsolutePath() ).toString();
}
}