Если вы создаете объект File, который оборачивает каталог верхнего уровня, вы можете вызвать его метод mkdirs () для создания всех необходимых каталогов. Что-то вроде:
// create a File object for the parent directory
File wallpaperDirectory = new File("/sdcard/Wallpaper/");
// have the object build the directory structure, if needed.
wallpaperDirectory.mkdirs();
// create a File object for the output file
File outputFile = new File(wallpaperDirectory, filename);
// now attach the OutputStream to the file object, instead of a String representation
FileOutputStream fos = new FileOutputStream(outputFile);
Примечание. Возможно, было бы разумно использовать Environment.getExternalStorageDirectory () для получения каталога «SD-карта», поскольку это может измениться, если появится телефон с чем-то иным, чем SD-карта (например, встроенная флэш-память, iPhone). В любом случае вы должны помнить, что вам нужно проверить, чтобы убедиться, что это действительно так, поскольку SD-карта может быть удалена.
ОБНОВЛЕНИЕ: Начиная с API уровня 4 (1.6), вам также придется запрашивать разрешение. Примерно так (в манифесте) должно работать:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Возникла та же проблема, и я просто хочу добавить, что AndroidManifest.xml также нуждается в этом разрешении:
источник
Вот что у меня работает.
в вашем манифесте и код ниже
источник
На самом деле я использовал часть @fiXedd asnwer, и у меня это сработало:
Убедитесь, что вы используете mkdirs (), а не mkdir () для создания полного пути
источник
File.mkdirs()
. Затем он показал пример его использования.С API 8 и выше, местоположение SD-карты изменилось. Ответ @ fiXedd хорош, но для более безопасного кода вы должны использовать его,
Environment.getExternalStorageState()
чтобы проверить, доступен ли носитель. Затем вы можете использоватьgetExternalFilesDir()
для перехода к нужному каталогу (при условии, что вы используете API 8 или выше).Вы можете прочитать больше в документации SDK .
источник
Убедитесь в наличии внешнего хранилища: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
источник
Не забудьте убедиться, что в именах файлов / папок нет специальных символов. Произошло со мной с «:», когда я устанавливал имена папок с помощью переменных
недопустимые символы в именах файлов / папок
Вы можете найти этот код полезным в таком случае.
Приведенный ниже код удаляет все ":" и заменяет их на "-"
источник
Я столкнулся с той же проблемой. В Android есть два типа разрешений:
Вот стратегия получения опасных разрешений в Android 6.0
onRequestPermissionsResult
Вот мой случай: мне нужно написать на внешнее хранилище.
Сначала я проверяю, есть ли у меня разрешение:
Затем проверьте одобрение пользователя:
источник
Я столкнулся с той же проблемой, не смог создать каталог на Galaxy S, но смог успешно создать его на Nexus и Samsung Droid. Как я это исправил, добавив следующую строку кода:
источник
это создаст папку с именем dor в вашей SDCard. затем извлечь файл для eg- filename.json, который вручную вставляется в папку dor . Подобно:
<использует-разрешение android: name = "android.permission.WRITE_EXTERNAL_STORAGE" />
и не забудьте добавить код в манифест
источник
источник
Просто завершаю пост Виджая ...
манифест
функция
использование
Вы можете проверить на ошибки
источник
источник
Вы можете использовать / sdcard / вместо Environment.getExternalStorageDirectory ()
источник
источник