Просто поместите его в путь к классу времени выполнения и используйте 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 .