Как указать относительный путь к файлу в файле Java, чтобы он все еще мог работать после помещения файла в файл jar? - PullRequest
4 голосов
/ 23 июня 2011

Предположим, у меня есть класс Java, которому нужен доступ к файлу с абсолютным путем /home/gem/projects/bar/resources/test.csv:

package com.example
class Foo {
String filePath = ????? // path to test.csv
String lines = FileInputStream(new File(filePath).readAllLines();

}

Где путь к Foo.java: /home/gem/projects/bar/src/com/example.

Конечно, я не могу указать абсолютный путь к файлу ресурса. Это связано с тем, что файл JAR будет распространяться как библиотека для любых клиентов, которые будут использоваться в их собственных средах.

Предположим, что файл ресурсов, такой как test.csv, всегда находится по одному и тому же пути относительно корня проекта. Когда создается jar-файл, содержащий Foo.class, этот jar-файл также содержит test.csv по тому же относительному пути (относительно корня проекта).

Как указать относительный путь, который будет работать независимо от того, куда перемещена панель проекта? Также, как я могу создать файл JAR (который может быть в любом месте), чтобы путь к файлу ресурса test.csv был по-прежнему правильным.

Для простоты я использовал недопустимый Java API (readAllLines (), который читает все строки и возвращает строку, содержащую все содержимое файла. Также без использования try / catch).

Предположим, что файл CSV может быть прочитан, а также записан.

Надеюсь, теперь все ясно.

Ответы [ 3 ]

4 голосов
/ 23 июня 2011

Поместите файл test.csv в папку src и используйте это:

Foo.class.getResourceAsStream("/test.csv")

Чтобы получить InputStream для файла. Это будет работать везде, где проект перемещен, в том числе упакован в файл JAR.

2 голосов
/ 07 января 2015

Пример:

ProjectX \ SRC \ Test.java

ProjectX \ Resources \ config.properties

Если у вас указанная выше структура и вы хотите использовать файл config.properties, вот как вы это делаете:

InputStream input = new FileInputStream ("./ resources / config.projects");

В этом примере вам не нужно беспокоиться об упаковке исходного кода в файл JAR. Вы все еще можете изменить папку ресурсов в любое время.

1 голос
/ 23 июня 2011

Используйте getResource(), как показано здесь .

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