Путь к файлу или местоположение файла для Java - новый файл ()

У меня есть следующая структура для моего проекта.

В Затмении:

myPorjectName
  src
    com.example.myproject
        a.java
    com.example.myproject.data
        b.xml

В a.java, Я хочу читать b.xml файл. Как я могу это сделать? В частности, в a.java Я использовал следующий код:

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse (new File("data/b.xml"));

Этот код не может найти b.xml, Однако, если я изменю путь к src/com/example/myproject/data/b.xml тогда это работает. Кажется, текущее местоположение находится в корне файла моего проекта.

Но я вижу примеры других людей, если b.xml а также a.java находятся в одной папке, то мы можем напрямую использовать new File("b.xml") , Но я стараюсь ставить b.xml в той же папке a.java вместо того, чтобы положить в подпапку, но все равно не работает. Если это работает, то в моем случае я смогу использовать new File("data/b.xml"), право? Я действительно не понимаю, почему это не работает.

1 ответ

Решение

Если он уже находится в classpath и в том же пакете, используйте

URL url = getClass().getResource("b.xml");
File file = new File(url.getPath());

ИЛИ, прочитайте это как InputStream:

InputStream input = getClass().getResourceAsStream("b.xml");

Внутри static метод, вы можете использовать

InputStream in = YourClass.class.getResourceAsStream("b.xml");

Если ваш файл находится не в том же пакете, что и класс, из которого вы пытаетесь получить доступ к файлу, то вы должны указать ему относительный путь, начиная с '/',

ex : InputStream input = getClass().getResourceAsStream
           ("/resources/somex.cfg.xml");which is in another jar resource folder
Другие вопросы по тегам