目录创建失败... Java,Android

时间:2010-08-23 17:40:44

标签: java android

我正在尝试将我用我的应用拍摄的照片保存到特定目录。它正在工作,但我已接近完成应用程序,并希望尝试全新安装。我删除了保存照片的文件夹,现在它不会重新制作。这是我的代码。

 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 个答案:

答案 0 :(得分:2)

  1. SD卡不必作为“/ sdcard”路径安装。始终使用android.os.Environment.getExternalStorageDirectory()

  2. 在写入SD卡之前,请使用android.os.Environment.getExternalStorageState()

  3. 检查其状态
  4. 确保在创建FileOutputStream实例之前创建所有目录。在您的情况下,这将是:PhotoDirectory.mkdirs()。检查返回值以确保路径中的所有目录都存在。

答案 1 :(得分:0)

这是我在目录名称中看到的空间吗?不要这样做,或者你真的必须这样做,正确地unix-escape它们(用反斜杠)。

答案 2 :(得分:0)

确保您在清单中声明了android.permission.WRITE_EXTERNAL_STORAGE