3

在任何人将此标记为重复之前,我想让您知道我已经经历了很多mkdirs()关于 SO 方法的问题,但没有一个对我有用,所以我相信我有一个值得提问的问题的特殊情况.

我尝试使用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");
    }
 }
4

2 回答 2

2

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");
                }
于 2015-08-14T03:14:23.740 回答
1

用这个

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");
    }
 }

更多信息在这里这里

从你的评论

但我不希望用户能够看到我要保存到文件夹中的文件

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

让我知道它是否有帮助先生

于 2015-08-14T03:10:14.907 回答