简体   繁体   中英

how to create a folder in android External Storage Directory?

I cannot create a folder in android External Storage Directory.

I have added permissing on manifest,

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Here is my code:

 String Path = Environment.getExternalStorageDirectory().getPath().toString()+ "/Shidhin/ShidhiImages";
  System.out.println("Path  : " +Path );
  File FPath = new File(Path);
  if (!FPath.exists()) {
        if (!FPath.mkdir()) {
            System.out.println("***Problem creating Image folder " +Path );
        }
  }

Do it like this :

String folder_main = "NewFolder";

File f = new File(Environment.getExternalStorageDirectory(), folder_main);
if (!f.exists()) {
    f.mkdirs();
}

If you wanna create another folder into that :

File f1 = new File(Environment.getExternalStorageDirectory() + "/" + folder_main, "product1");
if (!f1.exists()) {
    f1.mkdirs();
}

The difference between mkdir and mkdirs is that mkdir does not create nonexistent parent directory, while mkdirs does, so if Shidhin does not exist, mkdir will fail. Also, mkdir and mkdirs returns true only if the directory was created. If the directory already exists they return false

The use of Environment.getExternalStorageDirectory() now is deprecated since API level 29, the option is using:

Context.getExternalFilesDir() .

Example:

void createExternalStoragePrivateFile() {
    // Create a path where we will place our private file on external
    // storage.
    File file = new File(getExternalFilesDir(null), "DemoFile.jpg");

    try {
        // Very simple code to copy a picture from the application's
        // resource into the external file.  Note that this code does
        // no error checking, and assumes the picture is small (does not
        // try to copy it in chunks).  Note that if external storage is
        // not currently mounted this will silently fail.
        InputStream is = getResources().openRawResource(R.drawable.balloons);
        OutputStream os = new FileOutputStream(file);
        byte[] data = new byte[is.available()];
        is.read(data);
        os.write(data);
        is.close();
        os.close();
    } catch (IOException e) {
        // Unable to create file, likely because external storage is
        // not currently mounted.
        Log.w("ExternalStorage", "Error writing " + file, e);
    }
}

void deleteExternalStoragePrivateFile() {
    // Get path for the file on external storage.  If external
    // storage is not currently mounted this will fail.
    File file = new File(getExternalFilesDir(null), "DemoFile.jpg");
    file.delete();
}

boolean hasExternalStoragePrivateFile() {
    // Get path for the file on external storage.  If external
    // storage is not currently mounted this will fail.
    File file = new File(getExternalFilesDir(null), "DemoFile.jpg");
    return file.exists();
}

I can create a folder in android External Storage Directory.

I have added permissing on manifest,

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Here is my code:

String folder_main = "Images";

File outerFolder = new File(Environment.getExternalStorageDirectory(), folder_main);

File inerDire = new File(outerFolder.getAbsoluteFile(), System.currentTimeMillis() + ".jpg");

if (!outerFolder.exists()) {

    outerFolder.mkdirs();

}
if (!outerFolder.exists()) {

    inerDire.createNewFile();

}
  • outerFolder.mkdirs(); // This will create a Folder

  • inerDire.createNewFile(); // This will create File (For Eg .jpg
    file)

we can Create Folder or Directory on External storage as :

 String myfolder=Environment.getExternalStorageDirectory()+"/"+fname;
     File f=new File(myfolder);
     if(!f.exists())
     if(!f.mkdir()){
     Toast.makeText(this, myfolder+" can't be created.", Toast.LENGTH_SHORT).show();

    }
    else
     Toast.makeText(this, myfolder+" can be created.", Toast.LENGTH_SHORT).show();
}

and if we want to create Directory or folder on Internal Memory then we will do :

File folder = getFilesDir(); 
File f= new File(folder, "doc_download"); 
f.mkdir();

But make Sure you have given Write External Storage Permission. And Remember that if you have no external drive then it choose by default to internal parent directory. I'm Sure it will work .....enjoy code

getexternalstoragedirectory() is already deprecated. I got the solution it might be helpful for you. (it's a June 2021 solution)

Corresponding To incliding Api 30, Android 11 :

Now, use this commonDocumentDirPath for saving files.

Step: 1

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Step: 2

public  static  File commonDocumentDirPath(String FolderName){
    File dir = null ;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        dir = new File (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)+ "/"+FolderName );
    } else {
        dir = new File(Environment.getExternalStorageDirectory() + "/"+FolderName);
    }   
    return  dir ;

}

Try adding

FPath.mkdirs(); (See http://developer.android.com/reference/java/io/File.html )

and then just save the file as needed to that path, Android OS will create all the directories needed. You don't need to do the exists checks, just set that flag and save. (Also see : How to create directory automatically on SD card

If you are trying to create a folder inside your app directory in your storage.

Step 1 : Add Permission

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Step 2 : Add the following

private String createFolder(Context context, String folderName) {

    //getting app directory
    final File externalFileDir = context.getExternalFilesDir(null);

    //creating new folder instance
    File createdDir = new File(externalFileDir.getAbsoluteFile(),folderName);

    if(!createdDir.exists()){

    //making new directory if it doesn't exist already
        createdDir.mkdir();

    }
    return finalDir.getAbsolutePath() + "/" +  System.currentTimeMillis() + ".txt";
}

try {

String filename = "SampleFile.txt"; String filepath = "MyFileStorage";

                FileInputStream fis = new FileInputStream(myExternalFile);
                DataInputStream in = new DataInputStream(fis);
                BufferedReader br =
                        new BufferedReader(new InputStreamReader(in));
                String strLine;
                while ((strLine = br.readLine()) != null) {
                    myData = myData + strLine;
                }
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
          inputText.setText(myData);
            response.setText("SampleFile.txt data retrieved from External Storage...");
        }
    });

    if (!isExternalStorageAvailable() || isExternalStorageReadOnly()) {
        saveButton.setEnabled(false);
    }
    else {
        myExternalFile = new File(getExternalFilesDir(filepath), filename);
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM