【Android 开发】模拟器上的/storage/emulated/0 上创建目录

发布于:2024-04-17 ⋅ 阅读:(204) ⋅ 点赞:(0)

Android创建文件夹失败的原因及解决方法
在Android开发中,经常会遇到创建文件夹的需求,但有时候我们可能会遇到创建文件夹失败的情况。本文将介绍一些常见的原因,并提供相应的解决方法。

常见原因

1.权限问题

Android系统对于文件系统的访问有一些限制,如果你的应用没有获取到适当的权限,那么创建文件夹的操作将会失败。在AndroidManifest.xml文件中,你需要添加相应的权限声明来获取文件系统的访问权限。

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

2.目录路径错误

创建文件夹时,需要指定正确的目录路径。如果你提供了错误的路径,那么系统将无法找到要创建文件夹的位置,从而导致创建失败。请确保你提供的路径是有效的。

目录已存在
如果你尝试在已存在的目录中创建同名的文件夹,那么操作将会失败。在创建文件夹之前,你可以先检查目录是否已存在,如果已经存在,则可以避免重复创建。

File directory = new File("/sdcard/myfolder");
if (!directory.exists()) {
    if (directory.mkdirs()) {
        // 文件夹创建成功
    } else {
        // 文件夹创建失败
    }
} else {
    // 目录已存在
}

3.存储空间不足

在一些情况下,如果设备的存储空间不足,那么创建文件夹的操作将会失败。在创建文件夹之前,你可以检查设备的存储空间是否充足,若不足则提醒用户释放存储空间。

long availableSpace = Environment.getExternalStorageDirectory().getUsableSpace();
if (availableSpace < REQUIRED_SPACE) {
    // 存储空间不足
}

解决方法

4动态申请权限

如果你的应用在Android 6.0以上的版本中运行,你需要在运行时动态申请权限。你可以使用以下代码来检查并请求权限。

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {
    // 权限未授予,需要请求权限
    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
            REQUEST_CODE);
} else {
    // 权限已授予,可以进行文件夹创建操作
}

5.使用正确的目录路径

确保你提供的目录路径是正确的。你可以使用以下代码来获取常用的外部存储目录路径。

String externalStorageDirectory = Environment.getExternalStorageDirectory().getAbsolutePath();

处理目录已存在的情况
在创建文件夹之前,先检查目录是否已存在。如果已存在,你可以选择跳过创建操作或采取其他措施。
提示用户释放存储空间

6.安卓10出现问题,回滚权限

可以在manifest文件中的标签下加上这个属性: android:requestLegacyExternalStorage=“true” 这是因为Android10.0改变了文件的存储方式,加这个属性是启用旧的存储方式。 如果是正式项目的话建议使用存储访问框架(SAF)去做文件操作

    <application
	  android:name=".AndroidApp"
      android:theme="@style/UnityThemeSelector"
      android:icon="@mipmap/app_icon"
      android:label="@string/app_name"
      android:directBootAware="true"
	  android:hardwareAccelerated="true"
	  android:requestLegacyExternalStorage="true">
    </application>
作为备忘记录。


网站公告

今日签到

点亮在社区的每一天
去签到