2014-03-12 3 views
0

Я пытаюсь создать и записать во внешний файл в 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.

+0

Вы можете попробовать с помощью 'dir.mkdirs();', который создал бы весь путь, если он не существует, а не только в папке. – Merlevede

+0

Я пробовал с обоими - не работал. – ucsunil

ответ

0

Я понял, что пошло не так - похоже, что этот конкретный файл либо исказил что-то, либо вызвал какую-то странную ошибку. Я создал другое действие с другим именем в другом пакете в одной и той же папке и работал достаточно хорошо (код был скопирован и поэтому ничего не изменилось). Затем я удалил этот файл и воссоздал его, и он работал достаточно хорошо. Не знаю, почему это произошло, но поместив его там, на случай, если кто-то еще столкнется с этим в будущем.

До этого я создал отдельный проект и набрал тот же код, и он сработал. Поэтому я вернулся и попытался сделать Project -> Clean через Eclipse, но это тоже не сработало.

0

У вас нет доступа к / между sdcard и 0 на вашем пути?

+1

Нет '/' - sdcard0 является одним термином – ucsunil

Смежные вопросы