为什么 mkdirs() 方法不起作用?

Why is the mkdirs() method not working?

在任何人将其标记为重复之前,我想让你知道我已经解决了很多关于 SO 上的 mkdirs() 方法的问题并且 none 对我有用所以我相信我有一个值得提问的问题的特例。

我尝试使用 mkdir(),将目录 File 的实例化更改为

new File(Environment.getExternalStorageDirectory())
new File(Environment.getExternalStorageDirectory().getAbsolutePath())
new File(Environment.getExternalStorageDirectory(), "Directory")
new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "Directory")
new File(Environment.getExternalStorageDirectory().toString + "/Directory")

没有任何效果。

注意:我的清单中也有 WRITE_EXTERNAL_STORAGE 权限。

这是我的代码片段:

File rootDirectory = new File(Environment.getExternalStorageDirectory(), getActivity().getPackageName());

File directory = new File(rootDirectory, "Directory");
if (!directory.exists()) {
    if(directory.mkdirs()){
       Log.d("log", "exists");
    } else {
       Log.d("log", "not exists");
    }
 }

使用这个

File rootDirectory = new File(Environment.getExternalStorageDirectory(), 
      new File(Environment.DIRECTORY_DOCUMENTS, getActivity().getPackageName()));
   // if you target below api 19 use this => DIRECTORY_DOWNLOADS
  // now your old code follows life is good
File directory = new File(rootDirectory, "Directory");
if (!directory.exists()) {
    if(directory.mkdirs()){
       Log.d("log", "exists");
    } else {
       Log.d("log", "not exists");
    }
 }

更多信息here and here

来自您的评论

But I don't want the users to be able to see the files I am going to save into the folder

你可以使用 internal memory 并调用它 [getDir(java.lang.String, int)](http://developer.android.com/reference/android/content/Context.html#getDir(java.lang.String, int))

如果对您有帮助,请告诉我

mkdirs 创建完整文件夹树,mkdir 仅创建完整文件夹树路径中的最后一个文件夹

使用这样的代码:

String foldername = "HelloWorld";
                 File dir = new File(Environment.getExternalStorageDirectory() + "/" + foldername);
                if (dir.exists() && dir.isDirectory()) {
                    Log.d("log", "exists");
                } else {
                    //noinspection ResultOfMethodCallIgnored
                    dir.mkdir();
                    Log.d("log", "created");
                }