Мое приложение создает имя каталога на 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), или приложение завершает работу.
Однако при попытке сохранить файл некоторые пользователи сообщают об этом исключении:
Сообщение: 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, если sdcard смонтирован? Как я могу справиться с этим лучше?
Да, мы используем уникальные имена файлов (добавление
System.currentTimeMillis () к имени файла). Также поток закрывается в конце
finally
{
if(fos != null) {
try {
fos.close();
}
catch(Exception ex){
ex.printStackTrace();
}
}