Search code examples
androidandroid-5.0-lollipopandroid-permissionsandroid-storage

Exception 'open failed: EACCES (Permission denied)' on Android


I am getting

open failed: EACCES (Permission denied)

on the line OutputStream myOutput = new FileOutputStream(outFileName);

I checked the root, and I tried android.permission.WRITE_EXTERNAL_STORAGE.

How can I fix this problem?

try {
    InputStream myInput;

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

    // Path to the just created empty db
    String outFileName = "/data/data/XX/databases/"
            + "XXX.db";

    // Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);

    // Transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }

    // Close the streams
    myOutput.flush();
    myOutput.close();
    myInput.close();
    buffer = null;
    outFileName = null;
}
catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

Solution

  • I had the same problem... The <uses-permission was in the wrong place. This is right:

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

    The uses-permission tag needs to be outside the application tag.