안드로이드에서 'open failed: EACCES (Permission denied)' 예외가 발생합니다.

조회수 3782회

OutputStream myOutput = new FileOutputStream(outFileName); 부분에서 아래와 같은 에러가 발생합니다.

open failed: `EACCES (Permission denied)

문제점을 체크해봤고 android.permission.WRITE_EXTERNAL_STORAGE 도 시도해봤습니다.

이 문제 어떻게 해결할까요?

try {
    InputStream myInput;

    myInput = getAssets().open("XXX.db");

    // 생성된 빈 db의 경로
    String outFileName = "/data/data/XX/databases/"
            + "XXX.db";

    // 비어있는 db를 output stream으로 열기
    OutputStream myOutput = new FileOutputStream(outFileName);

    // input파일에서 output파일로 byte 데이터 전달
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }

    // stream 닫는 부분
    myOutput.flush();
    myOutput.close();
    myInput.close();
    buffer = null;
    outFileName = null;
}
catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    저도 같은 문제로 고생한적이 있는데요… 제 생각에는 uses-permission 의 위치가 잘못된 것 같아요. 이렇게 고쳐보세요.

    <manifest> 
            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
              ...
    
            <application>
                ...
                  <activity> 
                        ...
                  </activity
    
            </application>
    
        </manifest> 
    

    uses-permission 태그는 반드시 application 태그 밖에 있어야합니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)