代码之家  ›  专栏  ›  技术社区  ›  Vinayak Bevinakatti

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

  •  22
  • Vinayak Bevinakatti  · 技术社区  · 16 年前

    我正在使用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 回复  |  直到 12 年前
        1
  •  66
  •   David Webb    16 年前

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

    应用程序应写入文件的目录由 Context.getFilesDir() method . 会有点像 /data/data/com.yourdomain.YourApp/files .

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

    如果需要SD卡的路径,请使用 Environment.getExternalStorageDirectory() method . 要写入SD卡,您需要通过将以下内容添加到清单中,为应用程序提供适当的权限:

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

    如果您要给SD卡写信,还需要用 getExternalStorageState() 方法。

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

    所以在你的代码中考虑如下:

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