Не удается записать на SD-карту - canWrite возвращает false
Извините за неоднозначный заголовок, но я делаю следующее, чтобы написать простую строку в файл:
try {
File root = Environment.getExternalStorageDirectory();
if (root.canWrite()){
System.out.println("Can write.");
File def_file = new File(root, "default.txt");
FileWriter fw = new FileWriter(def_file);
BufferedWriter out = new BufferedWriter(fw);
String defbuf = "default";
out.write(defbuf);
out.flush();
out.close();
}
else
System.out.println("Can't write.");
}catch (IOException e) {
e.printStackTrace();
}
Но root.canWrite()
, кажется, возвращает false каждый раз. Я не запускаю это с эмулятора, у меня есть андроид Эрис, подключенный к компьютеру через USB и запуск приложения с моего телефона через Eclipse. Есть ли способ предоставить мое приложение, чтобы этого не произошло?
Кроме того, этот код, по-видимому, создает файл default.txt
, но что, если он уже существует, будет ли он игнорировать создание и просто открыть его для записи или мне нужно поймать что-то вроде FileAlreadyExists
(если такое исключение существует), который затем просто открывает и записывает?
Спасибо за помощь, ребята.
Ответы
Ответ 1
Есть ли способ предоставить мое приложение разрешения, так что этого не происходит?
Вам нужно разрешение WRITE_EXTERNAL_STORAGE
.
Вам также не нужно иметь карту SD, установленную на вашей машине разработки - либо компьютер, либо телефон могут получить доступ к SD-карте, но не обе в то же время.
Ответ 2
добавить разрешение WRITE_EXTERNAL_STORAGE к файлу манифеста
и если это необходимо, выполните следующие
- подключите дроид к компьютеру.
- вытащить менеджера (панель сверху со временем, извините, не знаю имя, не могу вспомнить прямо сейчас)
- hit "usb connected"
На вашем компьютере появится окно
- в котором отображается содержимое SD-карты.
- нажмите "выключить USB-накопитель", когда вы закончите
- отсоедините USB-кабель (если хотите), а затем ваш Droid снова сможет прочитать SD-карту.