3

Before anyone marks this as a duplicate I would like to let you know that I have gone through a lot of the questions about the mkdirs() method on SO and none have worked for me so I believe I have a special case for this problem worthy of a question.

I have tried using mkdir(), changed the instantiation of the directory File as

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

and nothing works.

NOTE : I ALSO HAVE THE WRITE_EXTERNAL_STORAGE permission in my manifest.

Here is my code snippet:

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");
    }
 }
John Ernest Guadalupe
  • 6,379
  • 11
  • 38
  • 71

2 Answers2

2

mkdirs create the complete folder tree, mkdir only the last folder in complete folder tree path

use a code like this:

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");
                }
Santiago
  • 1,744
  • 15
  • 23
1

use this

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

more info here and here

from your comment

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

you could use internal memory and call this [getDir(java.lang.String, int)](http://developer.android.com/reference/android/content/Context.html#getDir(java.lang.String, int))

let me know if it helps sir

Elltz
  • 10,730
  • 4
  • 31
  • 59