Mkdirs не создает папку во внутренней памяти (Android)

Я пытаюсь создать папку во внутренней памяти приложения, чтобы загружать в нее файлы. Но, похоже, это не работает. Я искал решение в течение многих часов, но я не могу его найти, и это начинает сводить меня с ума.

Это код для создания папки:

String intStorageDirectory = Environment.getDataDirectory().toString();
File folder = new File(intStorageDirectory, "testthreepdf");
folder.mkdirs();

Этот код всегда возвращает «НЕ СУЩЕСТВУЕТ»:

File f = new File(Environment.getDataDirectory() + "/testthreepdf");
if(f.exists())
{
    Log.i("testApp", f.toString() + "EXISTS");
}
else        {
    Log.i("testApp", f.toString() + " DOES NOT EXIST");
}

Это разрешения для Android:

<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE" >
</uses-permission>

Кто-нибудь знает, что не так с этим кодом?


person Bouss    schedule 27.12.2014    source источник


Ответы (2)


Environment.getDataDirectory() возвращает папку данных верхнего уровня, совместно используемую всеми приложениями. Там нельзя создавать папки. Чтобы создать папки в папке данных вашего приложения, используйте вместо этого getFilesDir(), например:

String intStorageDirectory = getFilesDir().toString();
File folder = new File(intStorageDirectory, "testthreepdf");
folder.mkdirs();

Вам нужен контекст для вызова getFilesDir().

Дополнительные сведения о разнице между getDataDirectory() и getFilesDir() см. в этом вопросе StackOverflow.

person samgak    schedule 27.12.2014

Еще одна проблема (хотя и не вызывающая какой-либо конкретной ошибки) заключается в том, что READ_INTERNAL_STORAGE и WRITE_INTERNAL_STORAGE не существуют в Android. Они не имеют никакого эффекта и должны быть удалены из вашего манифеста.

person Eric Burke    schedule 03.01.2015