2012-02-21 2 views
1
File mediaDir = new File("media"); 
if (!mediaDir.exists()){ 
    mediaDir.createNewFile(); 
    mediaDir.mkdir(); 

} 

File f = new File("/data/data/com.test.image/files/media/Voucher.jpg"); 
f.createNewFile(); 
FileOutputStream fos = new FileOutputStream(f); 
fos.write(b); 
fos.close(); 

시도를 읽기 전용이지만 오류가 발생 : 때 java.io.IOException : 읽기 전용 파일 시스템때 java.io.IOException : 전화 내부 메모리에있는 파일을 작성하는 파일 시스템

답변

2

추측/데이터/데이터는 외부 저장소가 아닙니다./data 디렉토리에 쓰려면 루트 권한이 있어야합니다. 참조 Data directory has no read/write permission in Android

+0

AndroidManifest.xml –

+0

에있는 을 (를) 휴대 전화에 뿌렸습니까? – user936414

+0

루트가 아닌 경우/data에 쓰기 권한이 없습니다. http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app – user936414

0

사용 mediaDir.mkdirs(); 대신 mediaDir.mkdir();도 필요합니다 WRITE_EXTERNAL_STORAGE 권한

+0

동일한 문제가 발생합니다. 동일한 오류가 발생합니다 .... 또한

0

응용 프로그램이 허용되지 않는 Android 시스템의 루트 디렉토리에 파일을 생성하고 있습니다.

응용 프로그램과 관련된 디렉토리를 만들려면 new File("media") 대신 getDir(String dirName, int mode)을 사용하십시오. 전화 만하면 미디어 디렉토리를 만들어 사용할 수 있습니다.

위 코드에서 수행중인 작업을 너무 많이 할 필요가 없습니다. 또한 매니페스트에 대한 허가를 줄 필요도 없습니다.

+2

답변을 수락 했음에도 불구하고 나는 그것이 당신이 찾고있는 것이라고 생각하지 않습니다./data/data는 모든 응용 프로그램 패키지가 설치되는 디렉토리입니다. 응용 프로그램 패키지는이 디렉토리 (/ data/data /)에서만 유지 보수됩니다. 그래서 패키지 이름이 ** com.test.image **라고 말하면, 경로가 /data/data/com.test.image/app_media 인 미디어 디렉토리가 생성됩니다. 따라서 액티비티/컨텍스트의 getDir 메소드를 사용하면이/data/data 폴더에 직접 액세스하여 파일을 쓸 수 있습니다. 매니페스트에 사용 권한을 쓸 필요가 없습니다. – AndroDev

관련 문제