Я пытаюсь создать и записать во внешний файл в Android. Мой минимальный SDK - 14, а мой целевой SDK - 18. У меня есть разрешение WRITE_EXTERNAL_STORAGE в правильном месте в моем манифесте. Ниже приводится Dection, где я создаю и установить путь к файлу файла, который будет создан:Создание/запись файлов на внешнее хранилище Android
String state = Environment.getExternalStorageState();
if(!state.equals(Environment.MEDIA_MOUNTED)) {
textView.setText("No external storage mounted");
} else {
File externalDir = Environment.getExternalStorageDirectory();
File dir = new File(externalDir.getAbsolutePath() + "/tests-folder");
dir.mkdir();
if(!dir.exists()) {
Log.i(null, "Does not exist"); // This gets printed - Why?
}
File textFile = new File(dir, "test.txt");
try {
writeTextFile(textFile, "This is a test!");
String text = readTextFile(textFile);
textView.setText(text);
} catch (IOException ex){
textView.setText("Something went wrong!" + ex.getMessage());
}
}
я получаю ошибку «Что-то пошло не так /storage/sdcard0/tests-folder/test.txt: open failed: ENOENT (Нет такого файла или каталога). Метод writeTextFile() является:
private void writeTextFile(File file, String text) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(file)); // When I debug, it comes up until here and then returns with the exception
writer.write(text);
writer.close();
}
Когда он попадает в первую строку в методе writeTextFile(), код возвращается с исключением. Я предполагаю, что файлы не создаются. Строка журнала «Не существует» печатается. Почему это? Я попробовал это как с моим телефоном, так и с эмулятором. Я попытался отключить свой телефон после установки и проверки и был бесполезен.
Если я изменяю путь к файлу, чтобы создать файл в корневой папке внешнего каталога, я получаю сообщение об ошибке разрешения EACCES Permission.
Вы можете попробовать с помощью 'dir.mkdirs();', который создал бы весь путь, если он не существует, а не только в папке. – Merlevede
Я пробовал с обоими - не работал. – ucsunil