2014-01-14 5 views
0

Я получаю Файл не найден Исключение для доступа к файлам в объекте File из jar, развернутого после успешной компиляции. В этом случае файлы помещаются в папку по умолчанию src и имеют доступ через src/filename. txt.Исключение FIle Not Found при развертывании Jar

Даже попробовал MyClass.class.getResource ("/ file.txt"). GetPath(); для доступа к файлу Dir Structure http://i43.tinypic.com/2dble0k.png

File filterFile=new File("win.txt"); 
File currentFile=new File("winP.txt"); 

Просьба представить предложения т.е. где разместить текстовый файл в NetBeans для развертывания банку.

+0

Было бы проще, если бы вы не скрывали имена своих классов и пакетов. – PeterMmm

ответ

0

Вам нужно различать файлы и ресурсы. Каждый файл также является ресурсом, но не наоборот. Внутри JAR-файла у вас нет файлов, а только ресурсов.

Загрузка ресурсов также выполняется с помощью загрузчика классов. Поэтому вы должны сначала загрузить загрузчик классов, а затем загрузить ресурс:

ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
URL resourceUrl = loader.getResource(resourceName); 
try (InputStream in = resourceUrl.openStream()) { 
    // load bytes from the input stream here 
} 
// process the loaded resource bytes here 

Теперь, где разместить файлы? Вы можете либо поместить их в корень JAR. Внутри вашего проекта это означает, что файл ресурсов находится в папке src. Или вы помещаете их в пакет, чтобы иметь их рядом с классом, который ему нужен.

Если вы помещаете его в корень, вы получаете доступ к ним только через имя ресурса. Если он помещен в подкаталог (пакет), вы должны префикс имени ресурса с этим путем - beginngin из корня. Пример:

URL resourceUrl = loader.getResource("my/pkg/win.txt"); 

Просто удобство: Если файл ресурса помещается в тот же пакет, как класса, нуждающегося этот ресурс, вы можете также использовать сам класс для загрузки (а не загрузчик классов):

URL resourceUrl = getClass().getResource("win.txt"); 

Обратите внимание, что в этом случае структура каталогов опущена.

В вашем примере вы создали файл-объект. Если вы использовали этот файловый объект для создания FileInputStream позже, вы можете просто использовать InputStream, который я описал выше, вместо этого.

+0

Спасибо, Sir.It действительно помочь мне. Но когда я пытаюсь выполнить команду powershell времени выполнения из java для выполнения сценария оболочки оболочки. Я получаю ** powershell -ExecutionPolicy RemoteSigned -noprofile -noninteractive/D:/Workspaces/Netbeans% 20Projects/Проект/SRC/RES/PName.ps1 **. Но это неверно. Я хочу получить путь к файлу скрипта, чтобы он мог его получить. –

+0

Извините, я не понял. Как правило, вы запускаете JAR-файлы с консоли с помощью «java -jar ». – Seelenvirtuose

+0

Я использую веб-старт для запуска файла jar из tomcat. –

Смежные вопросы