2014-02-06 3 views
0

내 응용 프로그램은 원격 웹 서버에서 zip 파일을 다운로드 한 다음 압축을 풉니 다.FileTransfer "저장된 파일 :"다음에 FileNotFoundException이 표시됩니다.

자바 스크립트가 성공적으로 로그 FileTransfer를 호출 :

FileTransfer Saved file: file:///data/data/com.yadda.yadda/update.zip 

즉시 파일을 테스트 내 사용자 지정 업데이트 플러그인을 호출하는 자바 스크립트 성공 기능의 일환으로 :

Context ctx = this.cordova.getActivity().getBaseContext(); 
File update = new File(ctx.getFilesDir(),"update.zip"); 
if(!update.exists()) Log.w("File not found",update.getAbsolutePath()); 

로그에 대한 그 마지막 줄은 다음과 같습니다 :

File Not Found /data/data/com.yadda.yadda/update.zip 

나중에 try/catch 블록에서 InputStream 변수가 만들어지고 catch 블록 중 하나가 매번 실행되는 FileNotFoundException입니다.

FileNotFoundException이 흥미로운 비트를 가지고 더 많은 정보 -

편집을 시작합니다. 파일 경로가 잘못 - 내가 FileInputStream에

InputStream fileis = new FileInputStream(update); 

그리고 예외의 흥미로운 비트 만들 수 같은 "업데이트"변수 보내고있다하더라도 :

Caused by: java.io.FileNotFoundException: /data/data/com.yadda.yadda/files/update.zip 

최종 편집

을 여기서 뭐가 잘못 됐어? Cordova는 파일 전송이 완료되고 파일이 저장되었다는 것을 기록하지만 파일을 테스트 할 때 파일이 존재하지 않습니다! FileInputStream을 만들 때 경로가 다른 이유는 예외입니까?

무엇이 누락 되었습니까? 모든 것은 IOS 버전의 앱에서 잘 작동합니다.

편집 2 : 요청에 따라, 나는 장치의 파일 시스템을 탐색하고 update.zip 참 /data/user/0/com.yadda.yadda

+0

당신은 당신이 파일 위치를 테스트하는 방법을 보여 올바른 디렉토리를 얻기 getFilesDir()

ctx.getFilesDir() = /data/data/com.yadda.yadda/files 

와 디렉토리를 얻기 있지만 방법 : 다음과 같이 표시됩니다 첫 x 째 인스턴스에서 저장 파일 위치를 설정합니다. 정확한 위치를 반환하는'getFilesDir()'은 파일을 저장 한 곳이 아니며 파일 전송 로그에서도 명확합니다. 어떻게 설정 했습니까? '/// data/data/com.yadda.yadda/update.zip'? – Simon

+0

자바 스크립트가 앱과 관련이있는 것은 무엇입니까? zip을 다운로드 한 후 Filetransfer는 무엇을해야합니까? 두 가지 경로를 언급합니다. – greenapps

+0

'/ data/data/com.yadda.yadda/files /'는'getFilesDir()'이 반환하는 정확한 위치입니다. 따라서 문제는 파일 전송에 있으며 귀하는이를 우리에게 보여주지 않았습니다. 따라서 귀하의 질문에 대답 할 수 없습니다. 다시 말해,'// data/data/com.yadda.yadda /'는 파일을 저장하는 올바른 장소가 아닙니다. – Simon

답변

0

확인에 존재하는 것을 발견, 어딘가에 버그가있다. 나는 그것이 다른 곳에서 일관된 작동을보고 있기 때문에 getAbsolutePath()에서 버그라고 믿고 싶다.

"파일 업데이트"변수를 만들면 즉시 update.getAbsolutePath()를 테스트하고 기록하십시오. 올바른 경로가 표시됩니다. 그러나 FileInputStream을 만들려고하면 경로가 달라집니다. (+/files /)

그래서 약간 검색하면 파일 데이터가없는 응용 프로그램 데이터 디렉토리에 액세스하기 위해 다른 파일을 보내야합니다. 디렉토리에 새로운 File 명령을 추가하십시오.

File update = new File(ctx.getApplicationInfo().dataDir,"update.zip"); 

ctx.getApplicationInfo().dataDir = /data/data/com.yadda.yadda 
관련 문제