2010-08-23 5 views
1

내 앱과 함께 찍은 사진을 특정 디렉토리에 저장하려고합니다. 그것은 작동하지만, 나는 애플 리케이션을 마친 것에 가까워지고 새로운 설치를 시도하고 싶었다. 사진을 저장하고 있던 폴더를 삭제하고 다시 만들지 않습니다. 여기 내 코드가있다. 디렉토리 생성에 실패했습니다 ... 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 /"라는 첫 번째 폴더를 만드는 것이 좋습니다. 필요한 경우 앱이 전체 디렉토리를 만들지 않도록해야합니다.

답변

2
  1. SD 카드를 "/ sdcard"경로로 마운트 할 필요는 없습니다. 항상 모든 디렉토리가 FileOutputStream 인스턴스를 작성하기 전에 생성되어 있는지 확인 android.os.Environment.getExternalStorageState()

  2. 과 상태를 확인 SD 카드에 쓰기 작업을 수행하기 전에

  3. android.os.Environment.getExternalStorageDirectory()를 사용합니다. 귀하의 경우 이것은 PhotoDirectory.mkdirs()입니다. 리턴 된 값을 점검하여 경로의 모든 디렉토리가 있는지 확인하십시오.

+0

감사합니다. 내가 기대하는 방식으로 작동합니다. 위 코드를 변경했습니다. 꺼져 있으면 알려줘. – Brian

0

내가 디렉토리 이름에서 볼 수있는 공간입니까? 그렇게하지 않거나, 정말로해야한다면, 백 슬래시로 그들을 유닉스 - 이스케이프합니다.

+0

에서 선언했는지 확인은 .. 현재 journid는 사용자로부터 입력입니다. 나도 똑같은 공간을 가지고 시도해 보았습니다

 08-23 14:00:00.223: WARN/System.err(9515): java.io.FileNotFoundException: /sdcard/GrowJournalPhotos/be/3/photo.jpg 
Brian

+0

장치/에뮬레이터에 연결된 ADB 셸에서 해당 디렉토리를 mkdir하려고하면 어떻게됩니까? –

0

그 길 아래에 더 문제가 될 수 있지만 당신은 android.permission.WRITE_EXTERNAL_STORAGE이 매니페스트

+0

나는 마지막 단락에서, 나는 이미 이것을 한 첫 번째 문장에서 언급했다. 의견을 보내 주셔서 감사합니다. – Brian

관련 문제