Путь к файлу работает в NetBeans, но не во встроенном файле JAR - PullRequest
2 голосов
/ 23 марта 2012

У меня есть файл, содержащий информацию по умолчанию, который я использую для загрузки текстовых полей моего приложения.Я посмотрел, как встроить этот файл в мой jar-файл при сборке, и мне сказали поместить его в пакеты с исходным кодом, и он будет доставлен вместе, поэтому я сделал это.

Структура файла:

Project
   -Source Packages
       -src
           ~Java Classes
       -defaultFiles
           ~Defaults.txt

Я пытаюсь использовать следующий код:

BufferedReader in;
try {
    URL resourceURL = FuelProperties.class.getResource("/defaultFiles/Defaults.txt");
    in = new BufferedReader(new FileReader(resourceURL.getPath()));
}

И это прекрасно работает, когда я запускаю его через NetBeans, но когда я собираю проект и пытаюсь запустить его из флягифайл не захватывает файл.

Я проверил, что файл по умолчанию создается и существует в той же файловой структуре, показанной выше.

Если вы можете помочь мне с этим, я быбыть чрезвычайно благодарным, поскольку я понятия не имею, что мешает этому работать.Благодарю.

Ответы [ 2 ]

4 голосов
/ 23 марта 2012

Вы должны искать в пути к классам, а не на диске. API для использования:

URL resourceURL : this.getClass().getResource("relative path in the classpath");

Получив URL, вы можете открыть поток и т. Д.

РЕДАКТИРОВАТЬ: в основном методе, вам, конечно, нужно заменить

this.getClass()

по

ClassName.class
1 голос
/ 26 марта 2012

Я нашел ответ после поиска по паре десятков вопросов. Оказывается, вы можете получить только InputStream данных в файле внутри вашего JAR, а не объект File, как я пытался сделать. (Если вам нужен объект File, вам просто нужно извлечь файлы из JAR в вашей программе, и тогда вы получите к нему доступ.)

Так что код, который заставил мою проблему работать, просто заменил это:

URL resourceURL = FuelProperties.class.getResource("/defaultFiles/Defaults.txt");
in = new BufferedReader(new FileReader(resourceURL.getPath()));

С этим:

in = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("/defaultFiles/Defaults.txt")));

И теперь он работает как внутри NetBeans, так и в файле Built JAR.

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