Разрешение пути в структуре пакета eclipse

#java #eclipse #groovy #xmlslurper

#java #eclipse #groovy #xmlslurper

Вопрос:

Это очень простой вопрос для многих из вас, читающих это, но для меня он совершенно новый. Вот скриншот для моего eclipse

введите описание изображения здесь

Когда я запускаю эту программу, я получаю, что java.io.FileNotFoundException: queries.xml (The system cannot find the file specified) я пытался ../../../queries.xml , но это также не работает. Я действительно не понимаю, когда использовать ../ потому что это означает возврат на 1 шаг назад в dir, и в некоторых случаях это работает, кто-нибудь может это объяснить? Также, как я могу ссылаться на queries.xml здесь. Спасибо

Примечание: я мог бы даже использовать этот код в окне Linux

Ответ №1:

Я предполагаю, что он компилирует ваш код в папку build или classes и запускает его оттуда…

Вы пробовали традиционный способ Java для этого:

 def query = new XmlSlurper().parse( GroovySlurping.class.getResourceAsStream( '/queries.xml' ) )
  

Предполагая, что этап сборки копирует xml в папку сборки, я считаю, что это должно сработать

Однако я не использую Eclipse, поэтому не могу быть уверен на 100%…

Комментарии:

1. getResourceAsStream() это правильный путь.

2. Спасибо, это тоже была хорошая информация, сработала для меня. Также, что, если позже я экспортирую проект в jar, будет ли он работать на этот раз?

3. @Abhishek Да, просто убедитесь, что ресурс находится в корневом каталоге.

4. Это должно сработать, поскольку src является исходной папкой, а XML-файл должен быть скопирован в jar. Вы можете проверить это, если заглянете в свою папку вывода сборки (я полагаю, это bin). Файл xml должен быть там.

Ответ №2:

Попробуйте

 file = new File("src/org/ars/groovy/queries.xml");
  

Чтобы проверить фактический рабочий каталог eclipse, вы можете использовать

 File f = new File(".");
System.out.println(f.getAbsolutePath());
  

Комментарии:

1. Да, это работает, спасибо. Что, если позже я экспортирую проект в jar, будет ли он работать на этот раз? Также я не могу использовать ../ здесь?

2. Я не могу полагаться на absolute paths , потому что я тоже буду заходить в Linux box 🙂

3. используйте getResourceAsStream(имяресурса). Но без «src». Я рекомендую создать в Eclipse папку под названием «ресурсы» (или что-то в этом роде). Добавьте эту папку в jar, и путь будет таким же. Если вы хотите использовать файл, у него будет относительный путь к вашему рабочему каталогу, если вы захотите использовать его позже в пакете ресурсов, resourceName будет таким же.

Ответ №3:

Вы могли бы попробовать использовать файл свойств для хранения пути к XML-файлам.

Таким образом, вы можете разместить XML-файлы в любом месте и просто изменить файл свойств. Это не потребует изменения / перекомпиляции кода.

Это означало бы, что вам нужно будет только жестко указать путь к файлу свойств.

Если вы предпочитаете не указывать путь к файлу свойств жестко, то вы могли бы передать его в качестве аргумента во время запуска в файле настройки вашего сервера. (в tomcat web.xml ). У каждого сервера будет эквивалентный установочный файл, в котором вы могли бы указать путь к файлу свойств.

В качестве альтернативы вы могли бы указать путь к xml в этом же файле, если вы не хотите использовать файлы свойств.

По этой ссылке будет показан пример чтения из файлов свойств.
http://www.zparacha.com/how-to-read-properties-file-in-java/