首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

无法在外部存储中创建文件夹,Android

问题涉及的基础概念

在Android开发中,外部存储(External Storage)是指设备上除了内部存储(Internal Storage)之外的存储空间。外部存储可以是设备的SD卡或者设备提供的外部存储空间。Android应用程序可以在外部存储中创建文件和文件夹,以便在不同的应用程序之间共享数据。

相关优势

  1. 数据共享:外部存储允许不同的应用程序之间共享文件和文件夹。
  2. 存储容量:通常情况下,外部存储的容量比内部存储大得多,适合存储大量数据。
  3. 持久性:即使应用程序被卸载,外部存储中的数据仍然可以保留。

类型

  1. 公共外部存储:所有应用程序都可以访问的外部存储空间。
  2. 私有外部存储:只有创建它的应用程序可以访问的外部存储空间。

应用场景

  • 保存用户下载的文件。
  • 保存应用程序生成的日志文件。
  • 保存需要与其他应用程序共享的数据。

常见问题及解决方法

无法在外部存储中创建文件夹的原因及解决方法

原因1:权限不足

在Android 6.0(API 级别 23)及以上版本中,需要在运行时请求存储权限。

解决方法:

  1. AndroidManifest.xml中添加权限声明:
  2. AndroidManifest.xml中添加权限声明:
  3. 在运行时请求权限:
  4. 在运行时请求权限:

原因2:路径错误

指定的路径不存在或者不正确。

解决方法:

确保路径正确并且存在:

代码语言:txt
复制
File directory = new File(Environment.getExternalStorageDirectory(), "MyFolder");
if (!directory.exists()) {
    directory.mkdirs();
}

原因3:外部存储不可用

外部存储设备未正确挂载或者不可用。

解决方法:

检查外部存储状态:

代码语言:txt
复制
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
    File directory = new File(Environment.getExternalStorageDirectory(), "MyFolder");
    if (!directory.exists()) {
        directory.mkdirs();
    }
} else {
    // 处理外部存储不可用的情况
}

示例代码

代码语言:txt
复制
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.io.File;

public class MainActivity extends AppCompatActivity {
    private static final int REQUEST_CODE = 123;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            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 {
                createDirectory();
            }
        } else {
            createDirectory();
        }
    }

    private void createDirectory() {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            File directory = new File(Environment.getExternalStorageDirectory(), "MyFolder");
            if (!directory.exists()) {
                directory.mkdirs();
            }
        } else {
            // 处理外部存储不可用的情况
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_CODE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                createDirectory();
            } else {
                // 处理权限被拒绝的情况
            }
        }
    }
}

参考链接

希望这些信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 存储学习之在外部存储中读写文件

上节学习了如何在手机内部存储中读写文件,本节学习如何在手机的外部存储中读写文件。那就是如何在Sdcard中读写文件。...那我们还是用以前登录界面的例子举例说明,(登录界面请看上节Android 存储学习之在内部存储中读写文件) 先我们显示写的代码: 当点击确定并且自动登录的钩是选中的,则就会在sdcard文件夹写创建一个...; } else { //如果选中自动登录,我们就需要保存用户名和密码 if(cb.isChecked()) { //创建一个文件...我们上面那些写Sdcard的路径是不对的,程序的健壮性不是很高,那就的用Google提供的访问sdcard的API:getExternalStorageDirectory //创建一个文件...,但是由于sdcard容量有限,不足与放下此文件,所以在用户打算放入一个文件到sdcard中时,需要先判断存储空间是不满足,不满足请用户给予提醒即可。

1.5K10

在Salesforce中创建Web Service供外部系统调用

在Salesforce中可以创建Web Service供外部系统调用,并且可以以SOAP或者REST方式向外提供调用接口,下来的内容将详细讲述一下用SOAP的方式创建Web Service并且用java...【注:要想使其成为web service,那么class一定要定义成global的,具体的方法要用 webService static 修饰】 在salesforce中开发-新建apex类。...2):在保存好上述的class之后,我们到setup --> build --> develop --> apex classes 中找到刚刚保存的class,我们会发现在对应的Action中有WSDL...4):我们可以简单的创建一个TestWebservice的javaproject 将AccountWebservice.wsdl生成AccountWebservice.jar 打开cmd 输入 java...代码如下,java中调用webservice中的接口方法 import java.util.ArrayList; import java.util.HashMap; import java.util.List

1.2K20
  • 在WordPress媒体库中创建文件夹

    WordPress默认后台媒体管理功能比较弱,不能整理不同类型媒体文件,如果您上传了大量媒体文件,都混杂在一起,无法管理,我们可以通过WordPress丰富的插件获得更好的媒体目录。...一、首先安装:FileBird 插件 安装插件后进入媒体库,你会发现新增文件夹选项: 可以新建文件夹,还可以右键单击文件夹重命名,删除,刷新或创建子文件夹等操作。...二,移动媒体文件 通过拖放媒体文件到相应的文件夹,也可批量选择。...三、上传媒体文件时通过选择左侧的文件夹上传到相应的文件夹中 不过FileBird 插件只能创建最多10个文件夹,想无限制创建文件夹,需要升级到 Pro 专业版,并可以兼容一些页面构建器类的插件。

    2.6K30

    【错误记录】Android 分区存储下的 SD 卡应用专属外部存储空间目录访问 ( 需手动创建应用专属外部存储空间目录 )

    文章目录 一、报错信息 二、解决方案 一、报错信息 ---- 开发时 , 需要向外置 SD 卡中拷贝一些文件 , 应用读取这些文件 , 进行相关配置 ; 但是 Android 系统 , 并不会主动为应用创建文件..., 外置 SD 卡的应用专属外部存储空间目录 , 需要开发者自己创建 ; 当前的包名是 com.example.filepath ; android { defaultConfig {...applicationId "com.example.filepath" } } 在 SD 卡根目录的 Android\data 目录下 , 并没有 com.example.filepath 目录..., 说明 Android 系统并不是自动为每个应用都创建一个应用专属外部存储空间目录 ; 二、解决方案 ---- 在应用中 , 获取 应用专属外部存储空间目录 下的 cache 目录 , 如果没有创建该目录...; 该目录的路径是 /storage/emulated/0/Android/data/com.example.filepath/cache ; /** * 应用专属外部存储空间目录下的

    64110

    使用Power Automate在Onedrive for Business中创建空文件夹

    在Onedrive for Business(以下简称ODB)中创建一个文件是非常轻松的一件事: 选择想要的路径,设置文件名,选择文件内容(文件内容大部分时候都是来自于其他action,比如邮件附件或者...forms附件等,这里为了简化流程,随便写了一个): 点击运行,就可以在文件夹中找到这个文件: 但是,如果我们想要创建一个文件夹呢?...比如我们在文件夹路径的后边继续输入“/测试生成路径”: 结果它也照样生成了这个文件,并且还为我们创建了一个新的文件夹: 答案呼之欲出了: 我们将这个a.txt文件删掉,不就达到了创建一个空文件夹的目的了吗...添加一个ODB的删除文件,选择上一步生成文件的ID: 在ODB中查看,果然生成了一个空文件夹。 我们再看一眼所需的时间,只需要14ms,根本忽略不计。...结论: Power Automate flow虽然并没有给我们提供一个单独的action来实现在ODB中创建空白文件夹,但是我们通过一点小技巧就可以巧妙的实现。

    3.6K10

    conda创建虚拟环境后文件夹中只有conda-meta文件夹,无法将环境添加到IDE中

    1.问题描述:anaconda的envs的其中一个环境目录下,没有python.exe文件,只有conda-meta和scripts 平时创建虚拟环境都是: conda create -n test...#test为创建的虚拟环境名称 因为之前也创建过好几次了,在命令行中也没有报任何错误,于是准备将刚配置的test虚拟环境添加到pycharm解释器中,但是发现在test环境中根本找不到除conda-meta...并没有指定python版本 直接conda create -n xxxxx然后激活后看到python是此anaconda默认版本的python 以为就没问题了 原来不指定python版本的话这个env文件夹下就没有...bin文件夹 无法正常激活、使用 使用的还是base环境(尽管前面标出了一个(xxxxx)) 删除有问题的虚拟环境:(base环境中执行) conda remove -n xxxx --all 重新新建虚拟环境...,新建时指定python版本 conda create -n test python=3.8 #test为创建的虚拟环境名称 这样就可以啦。

    2.9K30

    【android】在eclipse中查看genymotion模拟器的sd卡文件夹

    假设用google自带模拟器或者真机调试时,sd卡文件夹是在/mnt/sdcard。这个相信大家都知道。 但是今天用genymotion调试时。...发现根本打不开/mnt/sdcard这个文件夹,当时也没注意看其它信息。以为是adb、eclipse出了什么问题,重新启动它们后依旧打不开,经过一番苦苦挣扎后,发现了一个重要的线索!...哦,原来和我完捉迷藏呢,它指向了还有一个文件夹,接着找,发现: 晕,这孩子挺顽皮的,还是指向了其它文件夹: 最终找到了。...真正的SD卡文件夹是在/mnt/shell/emulated/0/里面 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115413.html原文链接:https:/

    1.3K20

    在 MSBuild 编译过程中操作文件和文件夹(检查存在创建文件夹读写文件移动文件复制文件删除文件夹)

    本文整理 MSBuild 在编译过程中对文件和文件夹处理的各种自带的编译任务(Task)。 ---- Exists 检查文件存在 使用 Exists 可以判断一个文件或者文件夹是否存在。...\bin\$(Configuration)\ MakeDir 创建文件夹 下面的例子演示创建一个文件夹: 1...\bin\$(Configuration)\" /> 下面是使用到 MakeDir 全部属性的例子,将已经成功创建的文件夹提取出来。...移动后,所有的文件将平级地在输出文件夹中(即所有的子文件夹中的文件也都被移动到同一层目录中了)。...\bin\$(Configuration)\" /> 下面是使用到 MakeDir 全部属性的例子,将已经成功创建的文件夹提取出来。

    36320

    【Android NDK 开发】在 C 代码中获取 Android 系统信息 ( NDK 项目创建 | NDK 配置 | 获取 Android 系统版本号 )

    创建 NDK 项目 II . NDK 项目 相关配置 III . NDK 中获取 Android 版本号 IV . 使用 __system_property_get 可获取的参数 I ....创建支持 NDK 的项目 : 当前最新的 Android Studio 支持直接创建 支持 C/C++ 的带 NDK 配置的项目 ; 如果向现有项目加入 C/C++ 代码 , 首先要创建 cpp 代码文件..., 然后创建 CMakeList.txt 编译脚本 , 最后在 build.gradle 中配置该编译脚本 , 这里不再详细描述 ; 在菜单栏中选择 File -> New -> New Project...参数字符串来源 : 上述的参数字符串都定义在 Android 系统中的 build.prop 配置文件中 ; 4....MP3放入ringtones文件夹中,这里代码改为ro.config.ringtone=123. mp3) ro.config.notification_sound=regulus.ogg (默认提示音

    2K20

    好好管理你应用的文件夹,别再乱用了

    ,新的手机不再有外插SD卡的概念,采取了内置闪存(eMMC、UFS等)的方式,所以内部存储和外部存储在新的Android手机上已经在同一个硬件上了。...用户对app进行数据清理或卸载可以清理外部存储和内部存储下的所有文件目录。 3.2 内部存储 内部存储的文件夹其他应用和用户无法直接访问,可以用于存放敏感数据。...如果type不为null的话在外部私有目录下创建返回一个名为type的文件夹,为null直接返回外部私有根目录。...这个是在Android 5.0加入的api,创建和获取位于/sdcard/Android/media目录下的应用目录,该目录下的文件能够被其他应用访问和被MediaStore查询和获取。...为数众多的无责任开发者在这里胡乱创建文件夹,乱起名、乱放文件,普通用户根本无法判断哪些文件夹、文件是有用的,卸载app之后留下庞大的无法清理的垃圾文件,导致手机空间不足。

    1.4K10

    Android-文件存储目录

    android持久化方式 Android手机的存储分为:内部存储和外部储存,在Android4.4以前,手机机身存储就叫内部存储,插入的SD卡就是外部存储,但是在Android4.4以后这两个存储的定义又有了一些些变化...,新的手机不再有外插SD卡的概念,采取了内置闪存(eMMC、UFS等)的方式,所以内部存储和外部存储在新的Android手机上已经在同一个硬件上了。...1.内部存储(Internal Storage) 内部存储位于系统中很特殊的一个位置,对于设备中每一个安装的 App,系统都会在 data/data/packagename/xxx 自动创建与之对应的文件夹...当一个应用卸载之后,内部存储中的这些文件也被删除。对于这个内部目录,用户是无法访问的,除非获取root权限。...说明: 归类存放公有文件 如果type不为null的话在外部私有目录下创建返回一个名为type的文件夹,为null直接返回外部私有根目录。

    3.7K21

    从 Android 到 Windows 8:文件操作

    你可以将这些文件存储在应用数据文件夹,或将它们保存到外部存储介质(如 USB 驱动器)。 例如你编写了一个文字处理应用,用户可能希望保存正在处理的文档,并在下次使用时打开它。...为了帮助你的用户达到目的,你可以在第一个例子中把文档保存到应用数据文件夹,而在第二个例子中把照片保存到外部存储介质。 下面介绍 Windows 商店应用的应用数据文件夹。...若要将文件存储在外部存储介质中,可以使用 DeviceInformation 和StorageDevice 类。这些内容将在后文有更详细的介绍。 接下来介绍实际代码。...将文件保存到外部存储 在 Windows 商店应用中,你必须在与应用关联的 Package.appsxmanifest 中声明可移动存储的访问权限。...提示 在Android应用程序中,为了完成类似的功能,首先需要在应用的 manifest 文件中声明 WRITE_EXTERNAL_STORAGE 权限,如下所示。

    1.9K80

    android之文件存储目录介

    android持久化方式 Android手机存储分为:内部存储和外部储存。 在Android4.4以前,手机机身存储就叫内部存储,插入的SD卡就是外部存储。...但是在Android4.4以后这两个存储的定义又有了一些些变化,新的手机不再有外插SD卡的概念,采取了内置闪存(eMMC、UFS等)的方式,所以内部存储和外部存储在新的Android手机上已经在同一个硬件上...内部存储 内部存储位于系统中很特殊的一个位置,对于设备中每一个安装的 App,系统都会在 data/data/packagename/xxx 自动创建与之对应的文件夹。...对于这个内部目录,用户是无法访问的,除非获取root权限。 ? image.png 通常对应内部存储的路径为 data/data/packagename/files。...,同时在app卸载之后,这些文件也会被删除,类似于内部存储。

    76840

    干货 | 携程Android 10适配踩坑指南

    以 Android 10(API 级别 29)及更高版本为目标平台的应用在默认情况下被赋予了对外部存储设备的分区访问权限(即分区存储), 对外部存储文件访问方式重新设计,便于用户更好的管理外部存储文件。..., 所以应用需要提前确保支持分区存储 需要注意:在适配AndroidQ的时候还要兼容Q系统版本以下的,使用SDK_VERSION区分 2.2 新特性概览 2.2.1 外部存储 外部存储被分为应用私有目录以及共享目录两个部分...MediaStore API在共享目录指定目录下创建文件或者访问应用自己创建文件,不需要申请存储权限 MediaStore API访问其他应用在共享目录创建的媒体文件(图片、音频、视频), 需要申请存储权限...1)获取(创建)私有目录下的文件夹 //在自身目录下创建apk文件夹 File apkFile = context.getExternalFilesDir("apk"); 2)创建私有目录文件 生成需要下载的路径...主要是在公共目录下创建文件或文件夹拿到本地路径uri,不同的Uri,可以保存到不同的公共目录中。

    3.3K77

    Android开发笔记(三十二)文件基础操作

    : 获得外部存储的状态 MEDIA_UNKNOWN : 未知 MEDIA_REMOVED : 已经移除 MEDIA_UNMOUNTED : 未挂载 MEDIA_CHECKING : 正在检查 MEDIA_NOFS...getExternalStorageDirectory : 获得外部存储(即SD卡)的路径 getExternalStoragePublicDirectory : 获得外部存储指定类型目录的路径...isExternalStorageRemovable : 判断外部存储是否可以移除,该方法用于判断SD卡是系统自带的还是外部插入的,如是外部插入的该方法就返回true。...SD卡操作 app操作SD卡时需增加如下处理: 1、在AndroidManifest.xml中增加SD卡的权限配置 android:name="android.permission.WRITE_EXTERNAL_STORAGE...android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 2、代码中操作SD卡需要先判断当前SD卡是否已挂载。

    1.2K10
    领券