无法在SD卡中创建文件

问题描述:

我想将位图保存到文件,然后将其保存在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

这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

鉴于你所得到的例外,您需要在AndroidManifest.xml文件WRITE_EXTERNAL_STORAGE许可

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

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

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

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>