在我的Eclipse项目中,我有一个从一个驱动器文件夹链接的“ src”文件夹。 我要在FileReader加载的链接文件夹中还有一些其他文本文件。
我将如何最佳地获得此位置,而无需考虑该文件夹是链接的还是实际在项目文件夹中。我尝试使用
MyClass.class.getResource("");
但是它返回了“ bin”文件夹的路径。我可能没有正确使用它。我要获取的文件是“ src / de / lauch / engine / shaders / primitiveTestShader / vertexShader.vsh”
谢谢!
答案 0 :(得分:1)
您可以创建诸如“ src \ main \ resources”之类的资源文件夹,然后将其放在文件中,然后即可运行相同的代码。希望它能工作。
答案 1 :(得分:0)
我现在已经解决了我的特定问题,但是我仍然可以寻求更好的解决方案:)
public class LinkedResourceLocator {
private static Dictionary<String,String> locations;
public static String getPath(String path) {
if(locations==null) {
File projectLocal = new File(LinkedResourceLocator.class.getClassLoader().getResource("").getPath().replaceAll("%20", " ")).getParentFile();
File dotProject = new File(projectLocal.getAbsolutePath()+"\\.project");
locations = new Hashtable<String,String>();
File[] files = projectLocal.listFiles(new FileFilter(){
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
});
for (int i = 0; i < files.length; i++) {
locations.put(files[i].getName(), files[i].getAbsolutePath());
}
try {
BufferedReader br = new BufferedReader(new FileReader(dotProject));
StringBuilder fileContentBuilder = new StringBuilder();
String line;
while((line = br.readLine()) != null) {
fileContentBuilder.append(line.trim());
}
String fileContents = fileContentBuilder.toString();
Pattern p = Pattern.compile("<link><name>(\\w*)</name><type>\\d*</type><location>([\\w/:]*)</location></link>");
Matcher m = p.matcher(fileContents);
while(m.find()) {
locations.put(m.group(1),m.group(2));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.err.println("Can't locate .project file");
} catch (IOException e) {
e.printStackTrace();
System.err.println("Can't read .project file");
}
}
String locator = path.contains("/")?path.substring(0, path.indexOf("/")):path;
String restPath = path.substring(locator.length());
return locations.get(locator)+restPath;
}
}
此类从eclipse .project文件获取链接的资源位置,然后将项目本地路径(例如“ src / de / lauch / engine / shaders / primitiveTestShader / vertexShader.vsh”)转换为这些链接位置。