2014-09-04 2 views
3

난 그냥 실행 시간에 자원 디렉토리에있는 jar 파일에서 파일을 필요에있는 실행 가능한 jar 파일에서 리소스 파일을 얻는 방법 단지 같은 ... 그러나 그것은 단지 "이미지 여기<p></p> 나는 몇 가지 방법을 알고 ... buildpath

ImageIO.read(Login.class.getResource("res/images/icon.png")); 

내가 이클립스 빌드 경로에 추가 JAR 내의 디렉토리에서 이미지를 읽을 수 있지만, 일부".so를 "파일 일부를 가져 오는 동안 여기에 내가 몇 가지 문제에 직면하고있다를 읽고 cascade_hand.xml "파일을 리소스/캐스 캐 이드/..., runnable에서 사용할 수 있도록 런타임에 필요합니다 .JAR 파일.

CascadeClassifier cascade = new CascadeClassifier(this.getClass().getResourceAsStream("resources/cascades/haarcascade_mcs_leftear.xml"); 

내가에서 해당 파일을 복사하는 방법이 알고 ...

나는 ..이 작동하지 않습니다 too..but

CascadeClassifier cascade = new CascadeClassifier(
      "resources/cascades/haarcascade_mcs_leftear.xml"); 

을이 시도했던도이 작품 일부 임시 디렉토리 및 그들을 사용하지만 난 정말 그것을 어떻게 그것을 모르는가?

InputStream is = this.getClass().getResourceAsStream("resources/cascades/haarcascade_mcs_leftear.xml"); 

Runnable JAR에서 해당 유형의 파일에 액세스 할 수있는 다른 방법이 있습니까?

나는 또한 이클립스로 만든 jar 파일에 몇 가지 문제가있다.

Eclipse는 Runnable jar 파일을 만들고 빌드 경로에있는 jar 파일 내에 resources 디렉토리의 디렉토리를 만듭니다. 그러나 실제로는 모두 jar 파일의 하나의 상위 디렉토리로 생성됩니다.

이클립스의 폴더 계층 구조는 다음 이미지와 같습니다.

enter image description here

답변

2

불행히도 OpenCV는 원시 코드로 파일을 읽으므로 데이터를 임시 파일로 먼저 복사하는 것이 유일한 방법입니다.

String tempDir="tmp"; //TODO: use a sensible default 
Path tmp = Files.createTempFile(tempDir, "cv"); 
Files.copy(Login.class.getResourceAsStream(
    "resources/cascades/haarcascade_mcs_leftear.xml"), tmp); 
CascadeClassifier cascade = new CascadeClassifier(tmp.toString()); 
+0

그래, 친애하는 @llogiq 작동하는지는 알지만 이미 ** JAR **에서 사용할 수있는 내 원본 파일에 액세스 할 수는 없습니까? 여기 JAR 파일 내에서 작업해야하기 때문에 ..... – Gopal00005

+0

JAR을 업데이트 하시겠습니까? 그것은'Class.getResource (...) '와 1.7 이후에 사용 가능한 JarFileSystem을 사용하는 것이 가능할 수 있지만 매우 해킹 될 수 있습니다. OpenCV가있는 항아리에서로드하는 것은 직접 불가능합니다. 실행중인 운영 체제에 따라 옵션이있을 수 있습니다 (예 : Linux 및 기타 유닉스에서는 zip 파일로 병을 마운트 할 수 있음).하지만 휴대용 솔루션은 없습니다. – llogiq

+0

+1 마침내 나는이 일을해야만합니다 ....당신의 지원에 감사드립니다. @llogiq :) 당신도 투표 할 수 있고, 마음에 드는 질문으로 설정할 수 있습니다. – Gopal00005

0

당신은

InputStream inn = ClassLoader 
      .getSystemResourceAsStream("resources/cascades/haarcascade_mcs_leftear.xml"); 

는 희망이 도움이 파일을 읽기위한 클래스 로더를 사용할 수 있습니다.

+1

OpenCV의 파일 네이티브 코드를 읽기 때문에 아니 내가 jar 파일에서 파일에 액세스해야하는의 InputStream을 원하지 않는 .... – Gopal00005

+0

OpenCV의이 클래스 로더를 통해 읽기를 지원하지 않는 경우에 InputStream를 사용할 수 있습니다 클래스 로더를 통해 읽고 파일 시스템에 임시 파일을 작성한 다음 OpenCV를 사용하여 임시 파일을 읽습니다. – mschenk74

+0

Nope 형 OpenCV는 파일의 절대 경로가 필요하므로 InputStream을 사용할 수 없습니다. 네, 임시 파일 메커니즘을 사용할 수는 있지만 잘 모르겠습니다. – Gopal00005

관련 문제