数据目录在Android中没有读/写权限

Posted

技术标签:

【中文标题】数据目录在Android中没有读/写权限【英文标题】:Data directory has no read/write permission in Android 【发布时间】:2011-01-01 04:30:48 【问题描述】:

我使用的是 android 1.5 我的数据目录没有读/写权限

System.out.println("DAta can write??--->"+Environment.getDataDirectory().canWrite());
System.out.println("DAta can read??--->"+Environment.getDataDirectory().canRead());

所以请建议我如何为数据目录提供权限。

我要做的是创建一个文件并在模拟器的数据存储中添加一些内容,如下所示

private void writeToSDCard() 
        try 

            File lroot = Environment.getDataDirectory();

            if (lroot.canWrite())
                File lfile = new File(lroot, "samplefile.txt");
                FileWriter lfilewriter = new FileWriter(lfile);
                BufferedWriter lout = new BufferedWriter(lfilewriter);
                lout.write("XXXXXXXXXXXXXXXXXX");
                lout.close();
            
         catch (IOException e) 
            Log.e(m_cTAG, "Could not write file " + e.getMessage());
        
    

【问题讨论】:

【参考方案1】:

您不应该查看数据目录。这是手机存储中的系统目录 - 通常是 /data - 您的应用程序将永远没有写入权限。

Context.getFilesDir() method 返回您的应用程序应写入文件的目录。类似于/data/data/com.yourdomain.YourApp/files

如果您想写入手机存储中的文件,请使用Context.openFileOutput() method。

如果您想要 SDCard 的路径,请使用 Environment.getExternalStorageDirectory() method。要写入 SDCard,您需要通过将以下内容添加到您的 Manifest 来为您的应用程序授予适当的权限:

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

如果您要写入 SDCard,您还需要使用 getExternalStorageState() 方法检查其状态。

如果您要存储与应用程序相关的小文件,那么这些文件可以进入手机的存储空间而不是 SD 卡,因此请使用 Context.openFileOutput()Context.openFileInput() 方法。

所以在您的代码中考虑如下内容:

OutputStream os = openFileOutput("samplefile.txt", MODE_PRIVATE);
BufferedWriter lout = new BufferedWriter(new OutputStreamWriter(os));

【讨论】:

这是我尝试做的事情: private void writeToSDCard() try File lroot = Environment.getDataDirectory(); if (lroot.canWrite()) File lfile = new File(lroot, "samplefile.txt"); FileWriter lfilewriter = new FileWriter(lfile); BufferedWriter lout = new BufferedWriter(lfilewriter); lout.write("XXXXXXXXXXXXXXXXXX"); lout.close(); catch (IOException e) Log.e(m_cTAG, "Could not write file" + e.getMessage()); 是的,谢谢您的宝贵建议.. :-) 哪些特定的外部存储状态允许写入文件? Environment.getExternalStorageDirectory() is deprecated in API Level 29 onwards.

以上是关于数据目录在Android中没有读/写权限的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

Android——Android10的分区存储(Scoped Storage)

Firebase 数据库权限被拒绝,读/写权限设置为 true

获取权限数据[执行/读/写]文件的问题

在android中读写文件