Android写入权限不佳的文件

时间:2015-03-06 19:34:03

标签: android android-file android-permissions

当我将文件写入SD卡时,它会将权限写为-rw-rw ----并将所有者写为root。我遵循了android指南的文件写入权限,但它没有说明以root身份编写文件。我需要能够使用android文件管理器打开此文件,但由于我没有root权限,所以没有权限。 这是输出文件的代码:

 File file = getExternalStorageDirectory();

 File sim = new File(file, "Driving Sim App/");
 sim.getParentFile().mkdirs();
 sim = new File(sim, name+".csv");

 try {
     BufferedWriter bor = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(sim)));
     bor.write("This is a test");
     bor.close();
 } catch (FileNotFoundException e) {
     e.printStackTrace();
     return;
 } catch (IOException e) {
     e.printStackTrace();
 }

我的清单文件中也有这个:

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

任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:0)

您可能想尝试: File file = Environment.getExternalStorageDirectory();

答案 1 :(得分:0)

您的问题有两个可能的修复方法。首先,确保您的路径格式正确。打印出sim卡的路径,确保它没有任何额外的斜线或缺少斜线。 所有这些都是有问题的:

parent_dir//child_dir.csv
parent_dirchild_dir.csv
parent_dir/child_dir/.csv
parent_dir/child_dir.csv/

你真的想要这个:

parent_dir/child_dir.csv

我知道的另一个可能的问题是某些Android设备上的重建索引问题。这意味着在某些Android设备上,即使您成功编写了文件,它们也可能在存储中不可见(假设您在尝试编写文件时没有收到错误)。

通过使用MediaScannerConnection对象重新索引来解决此问题。

MediaScannerConnection.scanFile(this, new String[] { file.toString() }, null,
        new MediaScannerConnection.OnScanCompletedListener() {
            public void onScanCompleted(String path, Uri uri) {
                Log.i("ExternalStorage", "Scanned " + path + ":");
                Log.i("ExternalStorage", "-> uri=" + uri);
            }
});

^^当我遇到类似这样的问题时,我从另一篇帖子中得到了类似问题: Can't write to sdcard even with permissions set and external storage in MEDIA_MOUNTED state