Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android正在使用错误权限写入文件_Android_Android File_Android Permissions - Fatal编程技术网

Android正在使用错误权限写入文件

Android正在使用错误权限写入文件,android,android-file,android-permissions,Android,Android File,Android Permissions,当我将一个文件写入SD卡时,它将使用权限-rw rw----和作为root的所有者写入该文件。我遵循了android关于文件写入权限的指导原则,但它没有提到任何关于以root用户身份写入文件的内容。我需要能够使用android文件管理器打开此文件,但没有权限,因为我没有根目录。 这是用于输出文件的代码: File file = getExternalStorageDirectory(); File sim = new File(file, "Driving Sim App/"); sim

当我将一个文件写入SD卡时,它将使用权限-rw rw----和作为root的所有者写入该文件。我遵循了android关于文件写入权限的指导原则,但它没有提到任何关于以root用户身份写入文件的内容。我需要能够使用android文件管理器打开此文件,但没有权限,因为我没有根目录。 这是用于输出文件的代码:

 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" />

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

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

两个可能解决问题的方法。首先,确保路径格式正确。打印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);
            }
});
^^我是从另一篇类似文章中得到这篇文章的,当时我正在与这样的事情作斗争:

您的文件权限似乎反映了相关fuse守护程序的正常和正确行为。外部存储上没有每个包文件所有权的真正意义,而是相应unix组中的成员身份(在清单权限之后),该组应允许从中间权限集(在您的情况下是rw-)进行访问。更高版本中的每个包目录还可能添加权限。