2014-11-18 3 views
0

내 클래스가 포함 된 jar 파일 내 리소스에 액세스하려고합니다.JAR의 Java 리소스 액세스

이 사이트에는 몇 가지 방법이 있지만 작동하지는 않는 몇 가지 질문이 있습니다.

내 코드는 이것이다 :

package nl.joshuaslik.UFMReckoning; 

import java.io.File; 
import java.io.IOException; 
import java.util.Scanner; 

public class App { 

    public static void main(String[] args) { 
     System.out.println(getFile("file/test.txt")); 
    } 

    private static String getFile(String fileName) { 
     StringBuilder result = new StringBuilder(""); 

     // Get file from resources folder 
     ClassLoader classLoader = App.class.getClassLoader(); 
     File file = new File(classLoader.getResource(fileName).getFile()); 
     System.out.println(classLoader.getResource(fileName).getPath()); 

     try (Scanner scanner = new Scanner(file)) { 
      while (scanner.hasNextLine()) { 
       String line = scanner.nextLine(); 
       result.append(line).append("\n"); 
      } 
      scanner.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return result.toString(); 
    } 

} 

그리고 내 디렉토리 레이아웃이 있습니다 :

classes 
├── nl 
| └── joshuaslik 
|  └── UFMReckoning 
|   └── App.class 
└── file 
    └── test.txt 

이 코드는 잘 실행하지 항아리에있는 동안.

Outside JAR

그러나, 항아리 내부에있는 동안 작동하지 않습니다.

UFM-Reckoning-0.0.0-alpha.0.jar 
├── nl 
| └── joshuaslik 
|  └── UFMReckoning 
|   └── App.class 
├── META-INF 
| └── MANIFEST.MF 
└── file 
    └── test.txt 

Inside JAR

액세스를 시도하는 파일이 있음을 볼 수 있습니다 : file:/D:/Joshua/Git/Coding/UFM-Reckoning/build/UFM-Reckoning-0.0.0-alpha.0.jar!/file/test.txt, 나에게 이상한 경로처럼 보인다 때문에 Windows에서 허용되지 않습니다 거기에 !,의 .

Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Built-By: Joshua 
Created-By: Apache Maven 3.2.3 
Build-Jdk: 1.8.0_25 
Main-Class: nl.joshuaslik.UFMReckoning.App 

MANIFEST.MF

내용 사람은 고정 할 수있는 방법을 알고 있나요?

Windows 7 64 비트 및 Maven을 사용하여 컴파일하고 있습니다.

답변

0

classloader.getResourceAsStream() 메소드를 사용해 보셨습니까?

+0

getResourceAsStream()이 이전 시간에 작동하지 않는 이유는 모르겠지만 지금은 알 수 없습니다. 그러나이 방법은 이미지에 적합하지 않습니까? 그래서 같은 문제가 발생하여 파일이 발견되지 않습니다. – JoshCode

+0

예제의 getResource()가 getResourceAsStream()과 같지 않습니다. – SubOptimal

관련 문제