2013-05-01 258 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我只是給這個信息想,也許有一些問題,與此一類。 這裏是我的logcat

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

@湯姆有沒有在格式多點編輯它被遺棄沒有意義的分辨率的老問題,而且是最有可能的許多其他的副本 - 你結束將它拉到頁面的頂部,分散注意力的問題。 – 2015-01-02 17:17:12

回答

6

這logcat的是說你沒有權限寫入文件, 確保你已經在android清單中聲明瞭

<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

是的,我也這樣做了,但我仍然得到相同的錯誤 – 2013-05-01 19:10:16

+0

你確定你想創建文件的位置存在於文件系統中嗎?我編輯了我的答案,包括檢查目錄是否存在的代碼,如果沒有,創建它 – o0rebelious0o 2013-05-02 11:27:37

+0

另外,嘗試更改「String path = Environment.getExternalStorageDirectory()。toString();」到「String path = Environment.getExternalStorageDirectory()。toString()。getPath();」 – o0rebelious0o 2013-05-02 11:31:47

2

鑑於你所得到的例外,您需要在AndroidManifest.xml文件WRITE_EXTERNAL_STORAGE許可

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

已經完成了。 – 2013-05-01 19:10:34

1

java.io.FileNotFoundException:/mnt/sdcard/Jhs.jpg(拒絕)

在清單中添加此權限

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

已在清單文件中指定的權限 – 2013-05-01 19:11:09

+0

您正在放置文件。所以刪除'文件。mkdir();'因爲它會創建一個目錄並使用'file.createNewFile()' – Pragnani 2013-05-02 04:02:41

+0

我已經嘗試過,但它仍然顯示我相同error.I試圖如果有可能創建一個新的目錄而不是一個文件但代碼根本不起作用 – 2013-05-02 05:58:36

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>