Однако использование Environment.getExternalStorageDirectory(); означает, что файл всегда будет записываться в корневой каталог /mnt/sdcard. Можно ли указать определенную папку для записи файла?
if (Environment.MEDIA_MOUNTED.equals(state)) { // We can read and write the media mExternalStorageAvailable = mExternalStorageWriteable = true; } elseif (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { // We can only read the media mExternalStorageAvailable = true; mExternalStorageWriteable = false; } else { // Something else is wrong. It may be one of many other states, but all we need // to know is we can neither read nor write mExternalStorageAvailable = mExternalStorageWriteable = false; }
Используйте Filewriter
Наконец, но не в последнюю очередь, забудьте о FileOutputStream и используйте FileWriter вместо этого. Дополнительная информация об этом классе из программы FileWriter javadoc. Возможно, вам захочется добавить сюда еще немного обработки ошибок, чтобы проинформировать пользователя.
// get external storage file reference FileWriterwriter=newFileWriter(getExternalStorageDirectory()); // Writes the content to the file writer.write("This\n is\n an\n example\n"); writer.flush(); writer.close();
* Method to check if user has permissions to write on external storage or not
*/
publicstaticbooleancanWriteOnExternalStorage() { // get the state of your external storage Stringstate= Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { // if storage is mounted return true Log.v("sTag", "Yes, can write to external storage."); returntrue; } returnfalse; }
and then let’s use this code to actually write to the external storage:
// get the path to sdcard Filesdcard= Environment.getExternalStorageDirectory(); // to this path add a new directory path Filedir=newFile(sdcard.getAbsolutePath() + "/your-dir-name/"); // create this directory if not already created dir.mkdir(); // create the file in which we will write the contents Filefile=newFile(dir, "My-File-Name.txt"); FileOutputStreamos= outStream = newFileOutputStream(file); Stringdata="This is the content of my file"; os.write(data.getBytes()); os.close();
And this is it. If now you visit your /sdcard/your-dir-name/ folder you will see a file named - My-File-Name.txt with the content as specified in the code.