【问题标题】:Android mkdirs() doesn't workAndroid mkdirs() 不起作用
【发布时间】:2017-09-22 12:26:30
【问题描述】:

我正在尝试在我的手机存储中(不在 sdcard 上)使用我的 android 应用程序生成一个文件夹,但我的 mkdirs() 无法正常工作。

我在清单中设置了android.permission.WRITE_EXTERNAL_STORAGE 并使用了这个基本代码:

    File mediaStorageDir = new File(Environment.getExternalStorageDirectory(), "/MyDirName");

    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            Log.d("App", "failed to create directory");
        }
    }

但它不起作用...mkdirs 始终为 false 并且未创建文件夹。

我已经尝试了所有方法并查看了有关它的所有主题,但没有任何效果,我不知道为什么。

【问题讨论】:

  • 您需要 Android API 23+ 的运行时权限
  • 从android 6.0开始,你需要请求权限。在创建新文件之前添加这些行 ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},1);https://developer.android.com/training/permissions/requesting.html 上查看更多信息
  • "文件夹未创建" -- 你如何测试这个?
  • 非常感谢您的回答!我想我的应用程序现在可以工作,但是......我没有看到我的文件夹。当我显示我的 mediaStorageDir 变量时,这就是我所拥有的:/storage/emulated/0/MyDirName。我没有找到这个文件夹,为什么?
  • 现在我的 android 文件资源管理器中有该文件夹。它似乎与应用程序没有交互! Aftet 尝试我的应用程序后,我已经杀死了文件资源管理器以刷新它,但我的文件夹不存在。它现在就好像变魔术一样出现了!你有解释吗?

标签: android mkdirs


【解决方案1】:

如果您的目标和编译 sdk 比 lolipop 更高,请参考 this 链接

File sourcePath = Environment.getExternalStorageDirectory();

                File path = new File(sourcePath + "/" + Constants.DIR_NAME + "/");

                path.mkdir();

【讨论】:

  • 谢谢!对于您的第二个解决方案,我的 Android Studio 无法识别 Constants.DIR_NAME 变量。我必须导入一些东西吗?
【解决方案2】:

如果您是 Android Studio 的模拟器和设备文件资源管理器,请确保您右键单击模拟器的文件夹,然后单击“同步”以更新显示的文件。设备文件资源管理器不会自行实时更新。

【讨论】:

    猜你喜欢
    • 2018-03-16
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 2015-11-07
    相关资源
    最近更新 更多