Question

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

Était-ce utile?

La 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.

Autres conseils

From Java FileOutputStream Create File if not exists says you should do the following. It does state that FileOutputStream should be able to create if it doesn't exist but will throw exception if it fails so it's better to do the following. I guess this is a more sure-fire way it will work? I dunno. Give it a shot! :-)

File yourFile = new File("score.txt");
if(!yourFile.exists()) {
    yourFile.createNewFile();
} 
FileOutputStream oFile = new FileOutputStream(yourFile, false); 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top