【问题标题】:Create file failed from mkdir()从 mkdir() 创建文件失败
【发布时间】:2018-04-30 23:38:27
【问题描述】:

我尝试在我的 android 模拟器中创建文件,但是当我完成我的代码时。 我找不到我从 android 设备监视器创建的文件。

这是我的代码:

try {
    if (Environment.getExternalStorageState()
            .equals(Environment.MEDIA_MOUNTED)) {
        System.out.println("can be read and write");
        File sdFile = android.os.Environment.getExternalStorageDirectory();

        //String path = sdFile.getPath() + File.separator + "DestPdf";
        String path = sdFile.getPath() + "/demos/file/tmp/test";
        File dirFile = new File(path);

        if (!dirFile.exists()) { // if file doesn't exist
            System.out.println("create file");
            dirFile.mkdir(); // create file
            System.out.println(dirFile.toString());
        }
    }
} catch (Exception ex) {
    ex.toString();
}

我还添加了一些权限:

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

这是我的打印输出,我可以看到根目录 /storage/sdcard/demos/file/tmp/test

11-17 08:38:10.263 15501-15501/? I/System.out: can be read and write
11-17 08:38:10.263 15501-15501/? I/System.out: create file
11-17 08:38:10.264 15501-15501/? I/System.out: /storage/sdcard/demos/file/tmp/test

但我无法从 android 设备监视器中找到该文件

我错过了哪一步?任何帮助,将不胜感激 。提前致谢。

【问题讨论】:

  • 您尝试创建的不是文件而是目录。甚至三个目录。所以你应该使用 mkdirs()。
  • 抱歉输入错误,它是文件夹,我尝试 mkdirs(),它没有工作。
  • if(!dirFile.mkdirs()){Toast(..... 无法创建目录...);返回;}

标签: android mkdir


【解决方案1】:

你应该替换

dirFile.mkdir();

dirFile.mkdirs();

例子:

if (!dirFile.exists()) { // if file doesn't exist
        System.out.println(dirFile.mkdir());
        System.out.println(dirFile.mkdirs());

    }

第一个 [并且不会创建目录] 为 false,第二个为 true,您将创建 /demos/file/tmp/test

mkdirs() 还会在此 File 表示的路径中创建父目录。

mkdirs() 的 javadocs:

创建由此抽象路径名命名的目录,包括任何 必要但不存在的父目录。请注意,如果这 操作失败它可能已经成功地创建了一些 必要的父目录。

mkdir() 的 javadocs:

创建以此抽象路径名命名的目录。

希望能帮到你!

【讨论】:

  • 嘿,我试试dirFile.mkdirs();,它不起作用。我仍然感谢您的帮助。
  • 非常糟糕的代码。您应该检查 mkdirs() 的返回值,而不是在日志语句中使用它。
  • 更新我的回复,我试了一下,我现在可以看到文件夹了。谢谢你的帮助兄弟。
  • @greenapps:感谢您的评论,在日志语句中使用 retern 值只是为了快速找到问题,通常它是糟糕的代码,但是快速找到问题的方法;
【解决方案2】:

几个月前我遇到了同样的问题。

在我的情况下,文件在那里,但 windows 看不到它(或 adb 和 windows 资源管理器之间的集成)。

重置 MOBILE 是我找到的唯一解决方案...重置后文件在 Windows 资源管理器中。

我建议您尝试使用 cli 命令查找文件:

adb shell ls sdcard/"your_path"                                                                                           

另外,尝试使用以下方法创建它:

.getAbsolutePath()

像这样:

File path = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "YOUR_FOLDER_NAME");

if(!path.exists()) 
{
    path.mkdirs();
} 
else 
{ 
    Log.d ("TAG","Path already exists");
}

希望对你有帮助

【讨论】:

  • 我尝试重新启动我的 Android Studio ,然后再次打开 android 设备监视器。找不到我创建的文件夹。
  • 嘿,感谢您编辑的答案,这对我来说是一个很好的建议,谢谢。
【解决方案3】:

对于 Android 6+,您需要添加代码以要求用户确认您在清单中请求的权限。

Google 获取运行时权限。

【讨论】:

    猜你喜欢
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 2012-09-24
    • 2011-02-13
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多