8

我正在尝试将文件写入 SDCard,但在 logcat 中出现错误:

01-24 09:03:33.647: W/System.err(3353): java.io.FileNotFoundException: /mnt/sdcard/fun/itisfun.txt: open failed: EACCES (Permission denied)
    01-24 08:24:28.007: W/System.err(3353): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
    01-24 09:03:33.756: W/System.err(3353):at libcore.io.Posix.open(Native Method)

这里是我要写入 SDCard 的代码:

File root = null;     
try {  
    // check for SDcard   
    root = Environment.getExternalStorageDirectory();                   
    Log.i(TAG,"path.." +root.getAbsolutePath());  

    //check sdcard permission  
    if (root.canWrite()){  
        File fileDir = new File(root.getAbsolutePath()+"/fun/");  
        fileDir.mkdirs();  

        File file = new File(fileDir, "itisfun.txt");  
        FileWriter filewriter = new FileWriter(file);  
        BufferedWriter out = new BufferedWriter(filewriter);  
        out.write("I m enjoying......dude");  
        out.close();
    }
} catch(...) {
    ...
}

显现:

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

5 回答 5

9

要写入 SD 卡,您需要在清单文件中授予权限

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
于 2013-01-23T09:11:43.343 回答
4

您需要确保您拥有@Ram 提到的权限,并且SD 卡已安装。您可以通过以下方式检查它是否已安装:-

if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))

您应该优雅地处理未安装的卡,但一个常见的问题是,如果您的手机是通过 USB 电缆插入的,您可能会通过桌面操作系统安装它,这意味着它不是由 Android 安装的。

谢谢,

瑞安

于 2013-01-23T09:27:46.993 回答
0

这是我使用的一些代码,

public void yourMethod(){

File root = getDir(getApplicationContext());     
    try {  
        File fileDir = new File(root.getAbsolutePath()+"/fun/");  
        fileDir.mkdirs();  

        File file = new File(fileDir, "itisfun.txt");  
        FileWriter filewriter = new FileWriter(file);  
        BufferedWriter out = new BufferedWriter(filewriter);  
        out.write("I m enjoying......dude");  
        out.close();

    } catch(...) {
    ...
    }
}


public File getDir(Context context) {

        if (android.os.Environment.getExternalStorageState().equals(
                android.os.Environment.MEDIA_MOUNTED))
            cacheDir = new File(
                    android.os.Environment.getExternalStorageDirectory(),
                        DIRECTORY_NAME);
        else
            cacheDir = context.getCacheDir();
        return cacheDir;
    }

如果没有外置存储,基本都是用手机内部缓存(不适合大文件)

这个

于 2013-01-23T09:30:02.153 回答
0

如果您使用的是 4.4,请在此处阅读: http : //www.androidcentral.com/kitkat-sdcard-changes 基本上您无法再在驱动器上的任何位置进行读写。您只能写入您的私有目录和您已成为其所有者的目录。

于 2014-07-21T06:23:13.437 回答
-3
  1. 检查你的目录fun和文件itisfun.txt在SD卡上是否存在,如果你想通过程序制作,你必须添加权限:
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    该权限允许应用程序创建文件或目录,权限:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />只允许应用程序读写已经存在的文件。
  2. 确保您的权限在<application>标签之外,通常在标签之前。
于 2014-01-02T14:45:28.450 回答