Вопрос

Я создал приложение 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" )).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top