5

I want to make folders in my sdcard and I have used the code below:

public class Screen extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.welcome);

        operateOnFirstUsage();
    }

    private void operateOnFirstUsage() {

        String state = Environment.getExternalStorageState();
        Log.d("Media State", state);

        if (Environment.MEDIA_MOUNTED.equals(state)) {
            File appDirectory = new File(
                    Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyApp/");

            Log.d("appDirectroyExist", appDirectory.exists() + "");
            if (!appDirectory.exists()) 
                Log.d("appDir created: ", appDirectory.mkdir() + "");

            File dbDirectory = new File(
                    Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyApp/Database/");

            Log.d("dbDirectroyExist", dbDirectory.exists() + "");
            if (!dbDirectory.exists())
                Log.d("dbDir created: ", dbDirectory.mkdirs() + "");


            File themesDirectory = new File(
                    Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyApp/Themes/");
            Log.d("themesDirectroyExist", themesDirectory.exists() + "");
            if (!themesDirectory.exists()) 
                Log.d("themesDir created: ", themesDirectory.mkdirs() + "");

        }
    }
}

Also, I have set the sdcard write permission:

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

I've run the application several times and every time I get the LogCat output:

01-09 21:38:13.701: D/Media State(15363): mounted
01-09 21:38:13.701: D/appDirectroyExist(15363): false
01-09 21:38:13.701: D/appDir created:(15363): false
01-09 21:38:13.701: D/dbDirectroyExist(15363): false
01-09 21:38:13.701: D/dbDir created:(15363): false
01-09 21:38:13.701: D/themesDirectroyExist(15363): false
01-09 21:38:13.701: D/themesDir created:(15363): false

I have read similar question, but nothing useful to get. What should I do to get the code running? What is my problem?

Ali Allahyar
  • 341
  • 2
  • 11
  • 22

5 Answers5

13

Edited

Try this:

File mydir = new File(Environment.getExternalStorageDirectory() + "/mydir/");
if(!mydir.exists())
    mydir.mkdirs();
else
    Log.d("error", "dir. already exists");

And recheck permission

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Fahim
  • 12,198
  • 5
  • 39
  • 57
dakshbhatt21
  • 3,558
  • 3
  • 31
  • 40
  • You see I have done this in my code. I must get to the bottom of the problem. – Ali Allahyar Jan 09 '14 at 18:55
  • Just curious why it wold not be better to use `Environment.getExternalStorageDirectory()`? Is hard coding workable for all devices and future proof? – TheLettuceMaster May 20 '14 at 15:09
  • 1
    @KickingLettuce: yes you are right, we should use `Environment.getExternalStorageDirectory()` but for testing I use `/sdcard` and its working fine in my all emulators and device. Thanks for suggestion, I edited my answer. – dakshbhatt21 May 22 '14 at 03:32
  • @AliAllahyar: you can mark this answer as complete by clicking "right" sign below votes if your problem was solved. – dakshbhatt21 Dec 17 '14 at 13:54
  • @dakshbhatt21 You might need to edit your code to ```java File mydir = new File(Environment.getExternalStorageDirectory(), "/mydir/"); ``` – shanwu Jul 22 '20 at 07:16
  • @shanwu: both will work, the code you posted and I have in the answer will create a same file – dakshbhatt21 Jul 23 '20 at 18:19
1

This is how I created folder MyDir in the Pictures folder od sdcard:

File mediaStorageDir =  new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"MyDir");
mediaStorageDir.mkdirs();
gile
  • 368
  • 1
  • 7
1

Try this way:

File file=new File(Environment.getExternalStorageDirectory() + File.separator +"MyApp/");
file.mkdirs();
Dharmendra
  • 571
  • 5
  • 12
1

Try this code:) , its simple.

        String fileName = "CallHistory.pdf";

        // create a File object for the parent directory
        File PDF_Directory = new File("/sdcard/MOBstate/");

        // have the object build the directory structure, if needed.          
        PDF_Directory.mkdirs();

        // create a File object for the output file           
         File outputFile = new File(PDF_Directory, fileName);

        // now attach the OutputStream to the file object, instead of a ring representation
         FileOutputStream fos = new FileOutputStream(outputFile);
Agilanbu
  • 2,747
  • 2
  • 28
  • 33
0

I don't know why the application acted that way, but finally I overcame this problem by removing and resetting the sdcard write permission in the Android manifest file. Thanks all of you for your kind help and apologize for taking your time.

Ali Allahyar
  • 341
  • 2
  • 11
  • 22