Search code examples
androidandroid-file

Cannot create a folder and put a file inside this folder


I want to create a folder and put all generated file in this folder so I have created this method to create a directory in external storage named MyAppFolder and put a .nomedia file in this folder to avoid media indexing

static String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
static String baseAppDir = "MyAppFolder";
static String fileHider = ".nomedia";

 public static void createFolder() {
        try {

            File mainDirectory = new File(baseDir + File.separator + baseAppDir);
            if (!(mainDirectory.exists())) {
                mainDirectory.mkdirs();
                File outputFile = new File(mainDirectory, fileHider);
                try {
                    FileOutputStream fos = new FileOutputStream(outputFile);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
        } catch (Exception exc) {
            System.out.println("ERROR: " + exc.toString());
            exc.printStackTrace();
        }
    }

I'm testing this on emulator but doesn't work, and I cannot understand how should I fix it.

The error log is:

java.io.FileNotFoundException: /storage/sdcard/MyAppFolder/.nomedia: open failed: ENOENT (No such file or directory)
    02-12 20:11:51.758    4899-4899/com.myapp.testapp W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:409)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
    02-12 20:11:51.758    4899-4899/com.myapp.testapp W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
    02-12 20:11:51.758    4899-4899/com.myapp.testapp W/System.err﹕ at com.myapp.testapp.MyFileManager.createFolder(MyFileManager.java:272)

I have also tried with

  File outputFile = new File(mainDirectory, fileHider);
  if(!outputFile.exists()) {
       outputFile.createNewFile();
  }
  try {
       FileOutputStream fos = new FileOutputStream(outputFile, false);
  } catch (FileNotFoundException e) {
  // TODO Auto-generated catch block
       e.printStackTrace();
  }

same result


Solution

  • Make sure you have the permission

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

    Your code can work on my device. If you do have the permission, due to some tiny differences between our Android systems, you can try to create a hidden directory, and create a file inside of it.

    static String baseAppDir = ".MyAppFolder";
    static String fileHider = "nomedia";
    

    Type in "ls -a" to check whether the hidden file has been really created. Don't 100% trust the exception log sometimes.