Мое приложение создает имя каталога на SD-карте телефона и хранит в нем кучу изображений. Код работает нормально для большинства пользователей, но некоторые сообщают об ошибках при сохранении файлов.
Вот код, который создает каталог: R.string.dir имеет значение «/appname/»
dir = Environment.getExternalStorageDirectory() + ((String) getResources().getText(R.string.dir));
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
File fDir = new File(dir);
fDir.mkdirs();
}
else{
showToast(false,"This Application needs a mounted external storage (sdcard).");
finish();
}
Таким образом, в этот момент каталог должен быть создан (в конечном итоге он будет /mnt/sdcard/appname), иначе приложение завершит работу.
Однако при попытке сохранить файл некоторые пользователи сообщают об этом исключении:
Msg: java.io.FileNotFoundException: /mnt/sdcard/appname/file.jpg (Нет такого файла или каталога)
Код, который делает сохранение:
File file = new File("/mnt/sdcard/appname/file.jpg");
FileOutputStream fos = null;
try {
fos = new FileOutputStream( file );
b.compress(Bitmap.CompressFormat.JPEG, 100, fos );
}
catch( Exception e ) {
Какие-либо предложения? Может ли быть так, что mkdirs() возвращает false (хорошо, если каталог уже создан, но тогда я смогу записать туда файл)? Что может быть еще одной причиной для возврата false, если SD-карта смонтирована? Как я могу справиться с этим лучше?
Да, мы используем уникальные имена файлов (добавляя System.currentTimeMillis() к имени файла). Также поток закрывается в конце
finally
{
if(fos != null) {
try {
fos.close();
}
catch(Exception ex){
ex.printStackTrace();
}
}