2016-12-06 2 views
0

Java Swing 응용 프로그램을 개발 중이며 암호 해독 용 키가 들어있는 파일 (예 : key.text)이 있습니다. 제 3 자 라이브러리를 사용하여 암호 해독이 수행됩니다. 해독을 위해 key.txt를 라이브러리 메소드에 전달 중입니다. 파일 경로가 JAR 파일 내부에서 작동하지 않습니다.

Eclipse 작업 공간 구조 I 이클립스에서 실행하고 때 나는 그것을 포장하고 때

String keyFilePath = "bin/key.txt"; 
aesEncrypt.setSecretKey(keyFilePath); // passing path to library method 

코드는하지만, 원활하게 작동하고 나는 다음과 같은 방법으로 빈 경로를 통과 시도

src 
    com.org.controller 
    com.org.beans 
    key.txt 

, 항아리가 작동하지 않습니다.

다음과 같은 방식으로 getResource()을 사용해 보았지만 너무 효과적이지 않습니다.

URL url = this.getClass().getResource("/key.txt"); 
File file = new File(url.toURI()); 
String keyFilePath = file.getAbsolutePath(); 
aesEncrypt.setSecretKey(new File(keyFilePath).getAbsolutePath()); // passing path to library method 

제 질문은 빌드 된 jar에있는 리소스 경로를 어떻게 전달할 수 있습니까?

+0

빈 폴더가 jar 파일에 존재하지 않는다 – XtremeBaumer

+0

일반적으로'loader.getResource ("key.txt")'와 같은 리소스를 가져 오기 위해'ClassLoader' (예 :'Thread.currentThread(). getContextClassLoader()')를 사용해야합니다. 이'getResource' 메쏘드는'URL'을 반환하기 때문에 다음 단계는 여러분의 라이브러리가 그러한 URL을 취하는 메소드를 제공하는지 알아 보는 것입니다. – Seelenvirtuose

+0

'aesEncrypt'의 종류는 무엇입니까? 파일 대신 URL 또는 InputStream을 허용하는 메소드가 있습니까? .jar 파일은 실제로 몇 개의 Java 특정 항목이있는 zip 파일입니다. key.txt는 별도의 파일이 아닌 zip 파일의 항목이므로 java.io.File을 사용하여 읽을 수 없습니다. – VGR

답변

2

당신이 전화하고있는 API 파일 이름을 필요로 표시하기 때문에, 당신은 실제 파일에 압축 항목이 아닌 실제 파일 리소스를 복사해야합니다 :

Path file = Files.createTempFile(null, ".txt"); 
try (InputStream stream = this.getClass().getResourceAsStream("/key.txt")) { 
    Files.copy(stream, file, StandardCopyOption.REPLACE_EXISTING); 
} 

aesEncrypt.setSecretKey(file.toString()); 
+0

우편 번호는 무엇을 의미합니까? – piechuckerr

+0

zip 파일은 아카이브 역할을하는 단일 파일입니다. zip 아카이브의 모든 구성원은 zip 항목입니다. 위의 설명에서 말했듯이, .jar 파일은 실제로 다른 확장자를 가진 zip 파일입니다. – VGR

+0

오케이. 그러나 내 파일 확장명이 txt가 아닌 경우 createTempFile()에 제공된 확장명을 변경해야합니까? – piechuckerr

0

이것은 원하는 것이 아닐 수 있지만 jar 폴더와 동일한 폴더에 bin 폴더를 만들 수 있습니다. 그런 다음 key.txt 파일을 입력하십시오.

관련 문제