Как работать с путем к файлу при обращении к содержимому папок проекта? - PullRequest
2 голосов
/ 12 февраля 2010

Допустим, у меня есть структура

-bin/com/abc/A.class
-src/com/abc/A.java
-config/info.txt

Как обратиться к файлу info.txt из класса A? Должны ли мы использовать свойство "user.dir" или "config / info.txt", чтобы оно работало? Я соберу это в банку и после этого банка будет использоваться из сервлета, но я не думаю, что это важно потому что этот файл написан и прочитан из только методы внутреннего jar.

1 Ответ

1 голос
/ 12 февраля 2010

Просто поместите его в путь к классу времени выполнения и используйте ClassLoader#getResourceAsStream(), чтобы получить InputStream. Поместить его в файл JAR среди классов или добавить его (относительный JAR) путь к записи Class-Path файла manifest.mf JAR более чем достаточно.

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("config/info.txt");
// Do your thing to read it.

Или, если вы действительно хотите получить его в виде java.io.File, используйте ClassLoader#getResource(), URL#toURI() и File конструктор, принимающий URI:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL url = classLoader.getResource("config/info.txt");
File file = new File(url.toURI());
// Do your thing with it.

Не не использовать относительные пути в java.io материалах. Это будет зависеть от текущего рабочего каталога, который вы никак не можете контролировать. Это просто квитанция за проблемы с переносимостью. Просто используйте путь к классам.

Тем не менее, вы знаете о java.util.Properties API ? Выглядит так, будто вы пытаетесь достичь того же, что проще сделать с помощью propertiesfiles .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...