目录创建失败。。。Java、Android

目录创建失败。。。Java、Android,java,android,Java,Android,我正在尝试将我用应用程序拍摄的照片保存到特定目录。这是工作,但我即将完成的应用程序,并想尝试一个新的安装。我删除了保存照片的文件夹,现在它不会重新制作它们。这是我的密码 PictureCallback jpegCallback = new PictureCallback() { // public void onPictureTaken(byte[] data, Camera camera) { FileOutputStream outStream = null;

我正在尝试将我用应用程序拍摄的照片保存到特定目录。这是工作,但我即将完成的应用程序,并想尝试一个新的安装。我删除了保存照片的文件夹,现在它不会重新制作它们。这是我的密码

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"); } }; PictureCallback jpegCallback=新建PictureCallback(){// 公共void onPictureTaken(字节[]数据,摄像头){ FileOutputStream扩展流=null; 试试{ android.os.Environment.getExternalStorageState(); //为父目录创建文件对象 文件光电目录=新文件( android.os.Environment.getExternalStorageDirectory()+ “/GrowJournalPhotos/”+journ\u id+“/”+plant\u id+“/”; //如果需要,让对象构建目录结构。 PhotoDirectory.mkdirs(); //为输出文件创建文件对象 File outputFile=新文件(PhotoDirectory,“photo.jpg”); //现在将OutputStream附加到文件对象,而不是字符串表示 outStream=新文件OutputStream(outputFile);//----第82行----// //写入SD卡 外扩。写入(数据); exptream.close(); Log.d(标记“onPictureTaken-写入字节:”+data.length); 设置结果(结果\正常); 完成(); }catch(filenotfound异常){// e、 printStackTrace(); }捕获(IOE异常){ e、 printStackTrace(); }最后{ } Log.d(标签“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 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):位于org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:244) 08-23 13:26:18.263:WARN/System.err(9515):位于java.io.FileOutputStream。(FileOutputStream.java:97) 08-23 13:26:18.263:WARN/System.err(9515):位于java.io.FileOutputStream。(FileOutputStream.java:69) 08-23 13:26:18.263:WARN/System.err(9515):在com.grower.beta.takephoto$3.onPictureTaken(takephoto.java:82) 08-23 13:26:18.263:WARN/System.err(9515):在android.hardware.Camera$EventHandler.handleMessage(Camera.java:323) 08-23 13:26:18.263:WARN/System.err(9515):位于android.os.Handler.dispatchMessage(Handler.java:99) 08-23 13:26:18.263:WARN/System.err(9515):位于android.os.Looper.loop(Looper.java:123) 08-23 13:26:18.263:WARN/System.err(9515):位于android.app.ActivityThread.main(ActivityThread.java:4595) 08-23 13:26:18.263:WARN/System.err(9515):位于java.lang.reflect.Method.invokenactive(本机方法) 08-23 13:26:18.263:WARN/System.err(9515):位于java.lang.reflect.Method.invoke(Method.java:521) 08-23 13:26:18.263:WARN/System.err(9515):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 08-23 13:26:18.263:WARN/System.err(9515):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 08-23 13:26:18.263:WARN/System.err(9515):在dalvik.System.NativeStart.main(本机方法) 08-23 13:26:18.263:DEBUG/CameraDemo(9515):onPictureTaken-jpeg 我确实设置了写入外部存储的权限。 如果我手动创建目录,在计算机上作为驱动器装载并创建第一个文件夹“/sdcard/GrowJournalPhotos/”,其他一切都可以工作。
必须确保应用程序在必要时创建整个目录

我在目录名中看到的是空格吗?不要这样做,或者如果你真的必须这样做,正确地转义它们(用反斜杠)

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

  • 在写入SD卡之前,请使用android.os.Environment.getExternalStorageState()检查SD卡的状态。

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


  • 确保您拥有android.permission.WRITE_EXTERNAL_STORAGE声明在您的清单中

    ,而这可能是今后的问题。。当前,journid是由用户输入的。我尝试了一个没有空格的目录,但仍然是一样的08-23 14:00:00.223:WARN/System.err(9515):java.io.FileNotFoundException:/sdcard/GrowJournalPhotos/be/3/photo.jpg如果您尝试从连接到设备/模拟器的ADB外壳中mkdir这些目录会发生什么?谢谢。就像我期望的那样。我已经更改了上面的代码。如果有什么问题,请告诉我。我在最后一段的第一句话中说我已经做了这件事。谢谢你的意见