(转载仅作记录)android 11 第一次安装软件,File.mkdirs()方法创建文件夹失败

因为第一次安装软件后,File.mkdirs()方法创建文件夹失败,去网上找到了原因在这里
文件路径原本用的是Environment.getExternalStorageDirectory(),现在改为context.getFilesDir().getAbsolutePath()

import android.os.Environment;

import java.io.File;

public class SDCardUtil {
    /*public static String getInnerSDCardPath() {
        return Environment.getExternalStorageDirectory() + File.separator;
    }*/
    
    public static String getInnerSDCardPath() {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            File external = MainApplication.getContext().getExternalFilesDir(null);
            if (external != null) {
                return external.getAbsolutePath() + File.separator;
            }
        }
        return MainApplication.getContext().getFilesDir().getAbsolutePath() + File.separator;
    }
}
`File.mkdirs()` 会在指定路径下创建目录,如果无法创建则通常会抛出异常来表明失败的原因。当你尝试使用 `mkdirs()` 但结果看起来被忽视了,可能是由于以下几种情况: 1. **文件系统限制**:例如磁盘空间已满,或者当前用户没有足够的权限在特定位置创建目录。 2. **路径已存在**:如果目标路径已经是一个存在的文件,而非目录,`mkdirs()` 会被阻止,因为不能在一个非目录创建目录。 3. **IO 错误**:如网络问题、硬件故障等导致的I/O操失败。 4. **程序中断**:创建过程可能因其他线程的中断或者操系统层面的问题被中断。 为了查看具体的失败原因,你需要捕获并处理 `IOException` 或 `SecurityException`,这是 `mkdirs()` 可能抛出的异常。下面是一个示例: ```java try { File dir = new File("path/to/directory"); boolean success = dir.mkdirs(); if (!success) { throw new RuntimeException("Failed to create directory: " + dir.getAbsolutePath(), new IOException("Directory creation failed")); } } catch (IOException e) { // Handle the exception - print stack trace or take appropriate action e.printStackTrace(); } // You can also check for specific exceptions like SecurityException catch (SecurityException se) { // Log or handle security related errors System.err.println("A security error occurred while creating directory: " + se.getMessage()); } ``` 通过这种方式,你可以获取到关于失败原因的详细信息,并据此采取相应的措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值