2011-08-23 6 views
1

코어 jdk로 컴파일 된 jar 파일이 있습니다.Android - 외부 jar에서 txt 파일 읽기

txt 파일을 읽는 Java 클래스가 포함되어 있습니다. 이 클래스가 올바르게 작동하는지 테스트하는 테스트가 있습니다.

내 jar 파일을 내 안드로이드 프로젝트에 포함시킨 다음 txt 파일을 읽는 Java 클래스를 호출하면됩니다. 그것은보고 실패 : java.io.FileNotFoundException 및 '/'로드하려는 txt 파일의 경로를 추가합니다.

안드로이드의 보안 모델이 txt 파일을 읽을 수 없습니까?

내 프로젝트 구조 :

안드로이드 모듈 :

SRC/Loader.java [호출 GetName.java]

자바 모듈 :

test/TestGetName.java [GetNam 호출 e.java]

SRC/GetName.java

자원/names.txt

요약 :

TestGetName.java 작동

Loader.java 실패합니다. GetName 안에서 FileNotFoundException이 throw됩니다.

답변

1

결국 알아 냈습니다. 파일을 로컬 또는 리소스로로드하는지 확인해야하는 조건이 필요합니다. 조건부를 사용하지 않고 이것을 수행하는 더 좋은 방법이있을 것입니다. 자원 user77777777

1

예외가 FileNotFoundException이므로 파일 액세스가 중지되는 것처럼 보이지 않습니다. 확인을 위해 자세한 메시지를 확인해야합니다. 예외를 잡아서 자세한 메시지를 인쇄하십시오. 그것은 당신에게 더 좋은 아이디어를 줄 것입니다. 또한 파일 경로를 다시 확인하십시오.

편집 : 리소스 이름 만 전달하십시오.

getClassLoader().getResource("names.txt"); 
+0

자세한 메시지 내용 : /resources/names.txt (해당 파일이나 디렉토리가 없음) 하지만이 경로는 제공하지 않습니다. 나는 다음을 제공한다 : resources/names.txt –

+0

여기서 resources 폴더는 무엇인가? 어떤 디렉토리에? 리소스 폴더가 루트에 있다고 가정합니다. – Ronnie

+0

리소스 폴더는 모듈의 루트에 있습니다. 내가 왜 파일 시스템 루트에서로드하려고 시도하는지 모르겠다. –

0

내가 허용 대답은 나를 위해 왜하지만 작동하지 않았다 모르는로 읽기에 대한 힌트를

String source = "resources/inputfile.txt"; 
    BufferedReader fin; 

    InputStream inputStream = getClass().getResourceAsStream(source.substring(source.lastIndexOf("/"))); 
    if (inputStream != null) { 
     fin = new BufferedReader(new InputStreamReader(inputStream)); 
    } else { 
     fin = new BufferedReader(new FileReader(new File(source))); 
    } 

감사합니다.

빌드 시스템 : Gradle을

작업 환경 : 안드로이드 스튜디오

또한 외부 항아리에서 자원을 포함. 그러나 그것들을 사용하기 위해서는 완전한 경로도 포함시켜야했습니다.

this.getClass().getResourceAsStream("/template/login.xml") 

호프가 도움이되기를 바랍니다. 그러면 누군가를 도와주고 벽을 머리에 대고 3 시간 동안 대답하지 못하게 할 수 있기를 바랍니다.