Ошибка создания каталога ... Java, Android

1

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

 PictureCallback jpegCallback = new PictureCallback() { // 
     public void onPictureTaken(byte[] data, Camera camera) {
       FileOutputStream outStream = null;
       try {      
                 android.os.Environment.getExternalStorageState();
            // create a File object for the parent directory
              File PhotoDirectory = new File(
                      android.os.Environment.getExternalStorageDirectory()+
                      "/GrowJournalPhotos/"+journ_id+"/"+plant_id+"/");
        // have the object build the directory structure, if needed.
        PhotoDirectory.mkdirs();
        // create a File object for the output file
        File outputFile = new File(PhotoDirectory, "photo.jpg");
        // now attach the OutputStream to the file object, instead of a String representation
        outStream = new FileOutputStream(outputFile);    //----LINE 82----//

         // Write to SD Card
         outStream.write(data);
         outStream.close();
         Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length);
         setResult(RESULT_OK);
            finish();

       } catch (FileNotFoundException e) { // 
         e.printStackTrace();
       } catch (IOException e) {
         e.printStackTrace();
       } finally {
       }
       Log.d(TAG, "onPictureTaken - jpeg");
     }
   };

И ошибка IO:

08-23 13:26:18.263: WARN/System.err(9515): java.io.FileNotFoundException: /sdcard/GrowJournalPhotos/geo a/1/photo.jpg
08-23 13:26:18.263: WARN/System.err(9515):     at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:244)
08-23 13:26:18.263: WARN/System.err(9515):     at java.io.FileOutputStream.(FileOutputStream.java:97)
08-23 13:26:18.263: WARN/System.err(9515):     at java.io.FileOutputStream.(FileOutputStream.java:69)
08-23 13:26:18.263: WARN/System.err(9515):     at com.grower.beta.takephoto$3.onPictureTaken(takephoto.java:82)
08-23 13:26:18.263: WARN/System.err(9515):     at android.hardware.Camera$EventHandler.handleMessage(Camera.java:323)
08-23 13:26:18.263: WARN/System.err(9515):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-23 13:26:18.263: WARN/System.err(9515):     at android.os.Looper.loop(Looper.java:123)
08-23 13:26:18.263: WARN/System.err(9515):     at android.app.ActivityThread.main(ActivityThread.java:4595)
08-23 13:26:18.263: WARN/System.err(9515):     at java.lang.reflect.Method.invokeNative(Native Method)
08-23 13:26:18.263: WARN/System.err(9515):     at java.lang.reflect.Method.invoke(Method.java:521)
08-23 13:26:18.263: WARN/System.err(9515):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
08-23 13:26:18.263: WARN/System.err(9515):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
08-23 13:26:18.263: WARN/System.err(9515):     at dalvik.system.NativeStart.main(Native Method)
08-23 13:26:18.263: DEBUG/CameraDemo(9515): onPictureTaken - jpeg

У меня есть права на запись во внешнее хранилище. Если я создам каталог вручную, установив его как диск на компьютере и создав первую папку "/sdcard/GrowJournalPhotos/", все остальное будет работать. Непосредственно необходимо убедиться, что при необходимости приложение создаст весь каталог.

Теги:

3 ответа

2
Лучший ответ
  • SD-карту не нужно указывать как путь "/sdcard". Всегда используйте android.os.Environment.getExternalStorageDirectory()

  • Перед записью на SD-карту проверьте его состояние с помощью android.os.Environment.getExternalStorageState()

  • Убедитесь, что все каталоги созданы до создания экземпляра FileOutputStream. В вашем случае это будет: PhotoDirectory.mkdirs(). Проверьте возвращаемое значение, чтобы убедиться, что все каталоги в пути существуют.

  • 0
    Благодарю. работает так, как я ожидал. Я изменил свой код выше. Дайте мне знать, если что-нибудь не так.
0

Убедитесь, что в манифесте объявлен android.permission.WRITE_EXTERNAL_STORAGE

  • 0
    Я сказал в последнем абзаце, первом предложении, что я уже сделал это. Спасибо за вклад, хотя
0

Является ли это пространством, которое я вижу в имени каталога? Не делайте этого, или если вам действительно нужно, правильно unix-избегать их (с обратной косой чертой).

  • 0
    Хотя это может быть проблемой в будущем. В настоящее время журнал вводится пользователем. Я опробовал один без пробелов все то же самое <pre> 08-23 14: 00: 00.223: WARN / System.err (9515): java.io.FileNotFoundException: /sdcard/GrowJournalPhotos/be/3/photo.jpg </ PRE>
  • 0
    Что произойдет, если вы попытаетесь выполнить mkdir для этих каталогов из оболочки ADB, подключенной к вашему устройству / эмулятору?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню