Eclipse获取文件加载的链接资源路径

时间:2019-01-31 13:41:22

标签: java eclipse resources filereader getresource

在我的Eclipse项目中,我有一个从一个驱动器文件夹链接的“ src”文件夹。 我要在FileReader加载的链接文件夹中还有一些其他文本文件。

我将如何最佳地获得此位置,而无需考虑该文件夹是链接的还是实际在项目文件夹中。我尝试使用

MyClass.class.getResource("");

但是它返回了“ bin”文件夹的路径。我可能没有正确使用它。我要获取的文件是“ src / de / lauch / engine / shaders / primitiveTestShader / vertexShader.vsh”

谢谢!

2 个答案:

答案 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”)转换为这些链接位置。