2013-06-19 2 views
1

항아리 파일, 예를 들어 archive1.jar/home/ext/libs에 있습니다. 이 클래스에는 두 개의 클래스가 있으며 jar 계층의 루트에 텍스트 파일 (data.txt)이 있습니다. 이 항아리 클래스 중 하나 (예 : Data.java)는 파일을 읽어 일부 내부 데이터 구조를 시작합니다.항아리 안에 포함 된 파일 읽기

이제 archive1.jar 다른 프로그램의 라이브러리로 포함되어, 완전히 다른 디렉토리에 실행을 구문 분석 라고 /홈 /의 progs (archive1.jar이 실행의 클래스 경로에 지정된 프로그램의 명령).

내가 직면하고 문제는이 data.txt로 대신 에 archive1.jar 내부가되는 /홈 /의 progs에있는 가정하기 때문에 지금 Data.java가 더 이상 data.txt로의 경로를 이해할 수 없다는 것입니다/home/ext/libs.

내 문제는 내가이 data.txt로가 archive1.jar 내부에 있음을 이해하기 위해서는 Data.java 내부해야 어떤 변화? 즉, Data.java가 호출 프로그램이 어디에 있든 관계없이 archive1.jar 내의 data.txt를 읽을 수있게 만드는 방법입니다.

주 : 파일로 스레드 자바 리소스에는 것은 조금 달랐다, 또한 단지 내부의 파일을 읽는 방법에 대한 응답이 없었다. 하나는 그것이 불가능할 수도있다.

+0

몇 가지 코드를 볼 수 있습니까? –

+0

"Java 리소스를 파일"로 보았지만 적절한 대답을 찾지 못했습니다. 여기에 코드가 있습니다. Data.java 안에는 BufferedReader가 있습니다. br = new BufferedReader (새 FileReader ("data.txt")); 이 Data.java는/home/ext/libs에있는 archive1.jar 안에 있습니다. – Simo

+0

Q (그리고 그것의 중복 된 것들)가 정확히 무엇을해야하는지 알려주면 적절한 답을 찾을 수 없습니까? 넌 그걸하지 않았어? –

답변

2

JAR 아카이브 내의 리소스 파일에 액세스하는 방법은 getClass().getResourceAsStream()을 사용하는 것입니다. 이렇게하면 자원이 파일 시스템이 아닌 아카이브에서로드됩니다. 예를 들어, 당신은 당신이 자원에 InputStream 당신이 좋아하는 방식으로 진행 도착하면 다음이 방법

InputStream is=getClass().getResourceAsStream("data.txt"); 

data.txt에 액세스 할의 JAR 아카이브 내에서 Data.java와 같은 위치에 data.txt이있는 경우.

관련 문제