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>
Другие вопросы по тегам