2013-05-01 2 views
2

파일에 비트 맵을 저장하고 SD 카드에 저장하려고합니다.SD 카드에 파일을 만들 수 없습니다

String path = Environment.getExternalStorageDirectory().toString(); 
File file = new File(path, "Jhs"+".jpg"); 
file.mkdir(); 
OutputStream fOut; 
try { 
    fOut = new FileOutputStream(file); 
    BitmapMatrix convMatrix = new BitmapMatrix(0); 
    convMatrix.result.compress(Bitmap.CompressFormat.JPEG, 100, fOut); 

    fOut.flush(); 
    fOut.close(); 
} catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

는 또한이 코드는 Activity.I 그냥 어쩌면이 일부 문제가 있다고 생각하고이 정보를 제공하고 확장하지 않는 클래스에 있습니다 다음은 내 코드입니다. 가 여기에 점점 예외 감안할 때 내 로그 캣

05-01 18:00:22.555: W/System.err(31392): java.io.FileNotFoundException:   /mnt/sdcard/Jhs.jpg (Permission denied) 
05-01 18:00:22.555: W/System.err(31392): at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method) 
05-01 18:00:22.555: W/System.err(31392): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232) 
05-01 18:00:22.555: W/System.err(31392): at java.io.FileOutputStream.<init>(FileOutputStream.java:94) 
05-01 18:00:22.555: W/System.err(31392): at java.io.FileOutputStream.<init>(FileOutputStream.java:66) 
05-01 18:00:22.555: W/System.err(31392): at com.example.imageprocess.BitmapMatrix.computeConvolution3x3(BitmapMatrix.java:123) 
05-01 18:00:22.555: W/System.err(31392): at com.example.imageprocess.MainActivity.sharpen(MainActivity.java:105) 
05-01 18:00:22.555: W/System.err(31392): at com.example.imageprocess.MainActivity.onCreate(MainActivity.java:51) 
05-01 18:00:22.555: W/System.err(31392): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072) 
05-01 18:00:22.555: W/System.err(31392): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1836) 
05-01 18:00:22.555: W/System.err(31392): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1893) 
05-01 18:00:22.555: W/System.err(31392): at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
05-01 18:00:22.555: W/System.err(31392): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054) 
05-01 18:00:22.555: W/System.err(31392): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-01 18:00:22.565: W/System.err(31392): at android.os.Looper.loop(Looper.java:150) 
05-01 18:00:22.565: W/System.err(31392): at android.app.ActivityThread.main(ActivityThread.java:4389) 
05-01 18:00:22.565: W/System.err(31392): at java.lang.reflect.Method.invokeNative(Native Method) 
05-01 18:00:22.565: W/System.err(31392): at java.lang.reflect.Method.invoke(Method.java:507) 
05-01 18:00:22.565: W/System.err(31392): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 
05-01 18:00:22.565: W/System.err(31392): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) 
05-01 18:00:22.565: W/System.err(31392): at dalvik.system.NativeStart.main(Native Method) 
+0

- 모든 당신이 종료 그 일은 페이지 상단으로 끌어 당기고주의를 끄는 질문에서주의를 산만하게합니다. –

답변

6

가 로그 캣이 파일을 쓸 수있는 권한이 없습니다 말하는 당신의 AndroidManifest.xml 파일로 WRITE_EXTERNAL_STORAGE 권한이 필요합니다 android manifest에

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

을 선언했는지 확인하십시오.

이 작업을 추가 할 수 있습니다

File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath()+ "/%YOUR_FOLDER%/"); 
if (!(dir.exists() && dir.isDirectory())) { 
    dir.mkdirs(); 
} 

을 현재 위의 코드는 파일을 다른 폴더 위치를 시도하고 도움이되는지보고 싶다면. 이 코드는 파일을 만들 수있는/sdcard/Downloads/YOUR_FOLDER/디렉토리를 만듭니다. 저장 위치 옵션에 대해서는 here을 참조하십시오.

그런 다음 게시물로

File file = new File(dir, "Jhs"+".jpg"); 
file.createNewFile(); //CREATE THE FILE FIRST! 
OutputStream fOut; 
try { 
    fOut = new FileOutputStream(file); 
    .... 
} 

등을 할 수 있습니다.

+0

그래도 내가 그랬지만 여전히 같은 오류가 발생했습니다 –

+0

파일을 만들려는 위치가 파일 시스템에 있는지 확인하십시오? 내 대답을 편집하여 디렉토리가 존재하는지 확인하는 코드를 포함하고 그렇지 않다면 – o0rebelious0o

+0

을 만듭니다. 또한 "String path = Environment.getExternalStorageDirectory(). toString();"을 변경해보십시오. to "String path = Environment.getExternalStorageDirectory(). toString(). getPath();" – o0rebelious0o

2

, 당신은

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

이미 완료했습니다. –

1

java.io.FileNotFoundException : /mnt/sdcard/Jhs.jpg이

가 매니페스트에이 권한을 추가 (사용 권한이 거부)

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

매니페스트 파일에 이미 지정된 사용 권한 –

+0

파일을 저장하려고합니다. 그래서'파일을 제거하십시오.mkdir();'디렉토리를 만들고'file.createNewFile()'을 사용합니다. – Pragnani

+0

나는 또한 그것을 시도했으나 여전히 같은 에러를 보여줍니다. 파일 대신 새로운 디렉토리를 만들 수 있다면 시도했습니다. 그러나 코드는 전혀 작동하지 않습니다. –

1
java.io.FileNotFoundException: /mnt/sdcard/Jhs.jpg (Permission denied) 

그것은 당신처럼 돈을 본다 WRITE_EXTERNAL_STORAGE perimission이 없습니다.

당신의 AndroidManifest.xml이 추가 :이 의미있는 해상도없이 버려진 오래된 질문을 편집 형식으로 많은 포인트가 아니라, 가장 가능성이 많은 다른 사람의 중복 @ 톰

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>