2016-04-01 6 views
0

Я создал исполняемый файл JAR, файл находится в папке ресурсовКак читать файл из JAR-файла, как

Example.jar 
    | 
    |__src 
    | | 
    | Main.class 
    | 
    File1.txt 

, как мы можем прочитать FILE1.TXT как файл, Я попытался ниже код

ClassLoader classLoader =Main.class.getClassLoader(); 
File file= new File(classLoader.getResource("File1.txt").getFile());(without slash) 

и

File file= new File(classLoader.getResource("/File1.txt").getFile());(with slash) 

с косых чертами я amgetting исключения нулевого указателя и без косых черт я Geting имени файла или каталога неверен

+0

проще использовать абсолютный путь, а не релятивистский – Whitefret

ответ

0
getClass().getResourceAsStream("File1.txt") 

Однако нормально хранить свои ресурсы под директорией ресурсов внутри проекта и/или под корнем банки. поэтому я бы немного изменил структуру, чтобы поместить ресурсы dir под корень вашего проекта, а также под целевую структуру вашей банки, а затем поместить файл File1.txt. Таким образом, новая нагрузка COMAND будет что-то вроде этого:

getClass().getResourceAsStream("resources/File1.txt") 
0

Сначала вам нужно проверить загрузчик классов, а затем загрузить файл:

ClassLoader cl = Thread.currentThread().getContextClassLoader(); 
if (cl == null) { 
    cl = Class.class.getClassLoader(); 
} 
cl.getResourceAsStream("File1.txt"); 
1

Вам не нужен «Файл» экземпляр чтобы прочитать содержимое файла, как отвечали другие, просто используйте Stream или URL. Обратите внимание, что путь является абсолютным при использовании загрузчика классов:

Main.class.getClassLoader().getResourceAsStream("fileAtRoot.txt") 

эквивалентно

Main.class.getResourceAsStream("/fileAtRoot.txt") 

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

Вот ан пример:

ПРЕДУПРЕЖДЕНИЕ: ЭТО антипаттерн, НЕ реально использовать его

public class SOResourceLoad { 

    public static void main (String[] args) { 
    new SOResourceLoad().run(); 
    } 

    private void run() { 
    try { 
     URL resource = getClass().getResource("SOResourceLoad.class"); 
     System.out.println(resource); 
     System.out.println(resource.toURI()); 
     System.out.println(new File(resource.toURI())); 
    } catch (URISyntaxException e) { 
     e.printStackTrace(); 
    } 

    } 

} 

Результат от Затмения

file:/D:/opt/workspace/examples/target/classes/pdem/stackoverflow/SOResourceLoad.class 
file:/D:/opt/workspace/examples/target/classes/pdem/stackoverflow/SOResourceLoad.class 
    D:\opt\workspace\examples\target\classes\pdem\stackoverflow\SOResourceLoad.class 

результата из файла фляги :

jar:file:/D:/opt/sodist.jar!/pdem/stackoverflow/SOResourceLoad.class 
jar:file:/D:/opt/sodist.jar!/pdem/stackoverflow/SOResourceLoad.class 
Exception in thread "main" java.lang.IllegalArgumentException: URI is not hierarchical 
    at java.io.File.<init>(File.java:418) 
    at pdem.stackoverflow.SOResourceLoad.run(SOResourceLoad.java:25) 
    at pdem.stackoverflow.SOResourceLoad.main(SOResourceLoad.java:17) 

Стекло показывает нам, что мы не можем получить файл, когда мы выполняем файл jar.

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