Android无法在SD卡中创建文本或文件夹(一级和多级)

      在编写未捕获异常导致程序崩溃的demo中,需要将未捕获异常生成文本并导出到SD卡,此时发现demo里面的生成文本文件或文件夹(一级或多级)均无法生成的现象。

     已经在AndroidManifest.xml里面添加对SD卡进行读写的操作,并在MainActivity做了动态申请。

//动态申请权限
    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
            "android.permission.READ_EXTERNAL_STORAGE",
            "android.permission.WRITE_EXTERNAL_STORAGE" };//需要申请的权限
int permission = ActivityCompat.checkSelfPermission(this,"android.permission.WRITE_EXTERNAL_STORAGE");
        if(permission != PackageManager.PERMISSION_GRANTED)
            ActivityCompat.requestPermissions(this,PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);

//文件夹生成(多级)
  File dir = new File(PATH);

        if(!dir.exists()) {
            dir.mkdir();
            LogUtils.logE("mkdir crash paht = " + PATH);
        }
//目标文本
 File file = new File(PATH + FILE_NAME + time + FILE_NAME_SUFFIX);

//AndroidManifest添加权限
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
        tools:ignore="ProtectedPermissions" />

正常情况下,会在 /storage/emulated/0/的目录下生成PATH的文件夹,可当我想查看文件内容的时候,发现目录下并没有生成指定的文件夹,更别说需要的目标文本文件了。

解决办法:

1.确认已经添加访问权限,并在高版本(Android6.0)做了权限的动态申请。

    1.1 将dir.mkdir() 改为 dir.mkdirs();

    1.2 将PATH里面文件夹的名字改成小写;

    1.3 当文件夹生成,而文本没有生成,可以使用file.createNewFile();

2.如果以上方法无法解决,有可能是AndroidX更新了文件夹生成读写机制,不允许在根目录下创建路径,防止程序随意创建文件夹,限定了固定的名字命名文件夹。这种情况下,可以将targetSdkVersion和compileSdkVersion改为更低版本。

 


版权声明:本文为qq_29933359原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。