Как указать FilePath на Java?
-
18-09-2019 - |
Вопрос
Я создал приложение Java для "Debian Linux". Теперь я хочу, чтобы это приложение считывает файл, размещенный в каталоге, где указан файл JAR этого приложения. Так что же указать в аргументе объекта файла?
File fileToBeReaded = new File(...);
Что указывать как аргумент для вышеуказанного оператора, чтобы указать относительный FilePath, представляющий путь, в котором был размещен файл JAR приложения?
Решение
Если вы знаете имя файла, конечно, это просто
new File("./myFileName")
Если вы не знаете имя, вы можете использовать метод File Object (), чтобы получить список файлов в текущем каталоге, а затем выбрать тот, который вы хотите.
Другие советы
Используя относительные пути в java.io.File
полностью зависит от текущего рабочего каталога. Это отличается от того, как вы выполняете JAR. Если вы, например, в /foo
и вы выполняете банку java -jar /bar/jar/Bar.jar
тогда рабочий каталог все еще /foo
. Анкет Но если ты cd
к /bar/jar
и выполнить java -jar Bar.jar
тогда рабочий каталог /bar/jar
.
Если вам нужен корневой путь, на котором находится банка, один из способов будет:
File root = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());
Это возвращает корневой путь файла JAR (IOW корень пути класса). Если вы поместите свой ресурс по сравнению с корнем класса, вы можете получить его следующим образом:
File resource = new File(root, "filename.ext");
В качестве альтернативы вы также можете просто использовать:
File resource = new File(Thread.currentThread().getContextClassLoader().getResource("filename.ext").toURI());
Я думаю, что это должно сделать свое дело:
File starting = new File(System.getProperty("user.dir"));
File fileToBeRead = new File(starting,"my_file.txt");
Таким образом, файл будет искать в user.dir
собственность, которая будет рабочим каталогом вашего приложения.
Вы спрашиваете о проблемах спасения?
Если это так, то используйте передовые черты вместо обратных черт, как
"C: /users/you/desktop/test.txt"
вместо
"C: users you desktop test.txt"
Вы можете попросить своего класса загрузчика дать вам местоположение банки:
getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
... но я бы посоветовал поместить файл, который вы ищете в файле JAR, и прочитать его как ресурс (getClass().getResourceAsStream( "myFile.txt" )
).