Не удается записать на 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-карту.