Eclipse получает путь к связанному ресурсу для загрузки файла - PullRequest
0 голосов
/ 31 января 2019

В моем проекте Eclipse у меня есть папка "src", которая связана с папкой на одном диске.У меня есть несколько других текстовых файлов в связанной папке, которые я хочу загрузить с помощью FileReader .

Как получить это местоположение, оптимально, независимо от того, связана ли папкаили на самом деле в папке проекта.Я пытался использовать

MyClass.class.getResource("");

Но он возвращает мне путь к папке "bin".Я, наверное, не правильно это использую.Я хочу получить файл "src / de / lauch / engine / shaders / primitiveTestShader / vertexShader.vsh"

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Я решил свою конкретную проблему на данный момент, но я все еще открыт для лучших решений:)

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 "в эти связанные местоположения.

0 голосов
/ 31 января 2019

Вы можете создать папку ресурсов, например, 'src \ main \ resources' и поместить файл, после чего вы сможете запустить тот же код.надеюсь, это сработает.

...