Java не получает файл в исходном коде при компиляции
Недавно у меня возникла проблема с Java. Я пробовал некоторые вещи, которые нашел в Интернете, но они не сработали, поэтому мне нужна помощь. У меня есть проект Java в Eclipse. Мой основной класс в src/programCode/UI_Main2.java
, В этом .java
Я пытаюсь получить доступ к файлу в src/files/File.file
И это когда вещи странные.
Если я использую
/src/files/File.file
это дает мнеNoSuchFileException
,Если я использую
src/files/File.file
он работает в Eclipse, но когда я компилирую его в исполняемый файл.jar, он дает мнеNoSuchFileException
,Если я использую
/files/File.file
это дает мнеNoSuchFileException
,Если я использую
files/File.file
это дает мнеNoSuchFileException
,Если я использую
files/File.file
это дает мнеNoSuchFileException
,Если я использую
this.getClass().getResource("/files/File.file").getPath().substring(1)
(без подстроки это дает мне неверный характер) это дает мнеNoSuchFileException
(но он показывает мне абсолютный путь и файл существует там!)Если я использую
this.getClass().getResource("files/File.file").getPath()
это дает мнеNullPointerException
и программа вылетает.Если я использую
this.getClass().getResource("src/files/File.file").getPath()
это дает мнеNullPointerException
и программа вылетает.Если я использую
this.getClass().getResource("/src/files/File.file").getPath()
это дает мнеNullPointerException
и программа вылетает.
Итак, я не знаю, что делать. src/files/File.file
это единственный, который работает, но не скомпилирован в исполняемый jar. Поэтому, пожалуйста, помогите мне, я еще не нашел решения. Спасибо!
2 ответа
Поиск файла зависит от двух вещей:
- Используете ли вы абсолютный или относительный путь
- Где ваш рабочий каталог
Под Unix-подобной системой, когда вы используете путь как /dir1/dir2/file
вы используете абсолютный путь, поэтому ваш рабочий каталог не имеет значения, но вы должны иметь файл точно по этому пути.
В вашем случае вы пытаетесь использовать относительный путь, поэтому вы не должны использовать /
в начале.
Этот случай имеет решающее значение для вашей проблемы:
"If I use src/files/File.file it works in Eclipse but when I compile it to a executable .jar it gives me NoSuchFileException."
По умолчанию Eclipse использует в качестве рабочего каталога родительский каталог src
(который обычно является директорией для вашего проекта ", поэтому, начиная с этого момента, у вас действительно есть файл по этому пути.
Когда вы начинаете .jar
Ваш рабочий каталог находится где-то еще. Положить ваши .jar
в родительский каталог src
и это должно работать.
Теперь я предлагаю изменить местоположение файла на каталог, отличный от src
(назови это Resurces
или что-то) и предоставить его вместе с .jar
,
Кроме того, здесь есть интересная дискуссия о рабочих каталогах и .jar
файлы:
Текущий рабочий каталог при запуске Jar
Если вы хотите распространять один .jar
Вот хорошая инструкция по упаковке:
http://www.cefns.nau.edu/~edo/Classes/CS477_WWW/Docs/pack_resources_in_jar.html
Предполагая, что вы намереваетесь найти скомпилированную программу на вашем собственном компьютере разработки, вам нужно указать полный путь к нужному файлу. Этот полный путь будет иметь форму
<Eclipse workspace location>\<project name>\<file location in project>