Не удается записать на SD-карту - canWrite возвращает false - PullRequest
11 голосов
/ 12 апреля 2010

Извините за неоднозначный заголовок, но я делаю следующее, чтобы записать простую строку в файл:

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(), кажется, каждый раз возвращает ложь. Я не запускаю это на эмуляторе, мой Android Eris подключен к моему компьютеру через USB и запускает приложение с моего телефона через Eclipse. Есть ли способ дать разрешение моему приложению, чтобы этого не произошло?

Кроме того, этот код, по-видимому, создает файл default.txt, но что, если он уже существует, он проигнорирует создание и просто откроет его для записи или я должен поймать что-то вроде FileAlreadyExists (если такое исключение существует) который потом просто открывает и пишет?

Спасибо за любую помощь, ребята.

Ответы [ 2 ]

17 голосов
/ 12 апреля 2010

Есть ли способ дать мое приложение разрешение, чтобы этого не произошло?

Вам необходимо разрешение WRITE_EXTERNAL_STORAGE.

Вам также не нужно устанавливать SD-карту на вашем компьютере для разработки - компьютер или телефон могут получить доступ к SD-карте, но не к обоим одновременно.

0 голосов
/ 23 сентября 2011

добавить разрешение WRITE_EXTERNAL_STORAGE в файл манифеста

и, если необходимо, сделайте следующее

  1. подключите дроида к вашему компьютеру
  2. опустить менеджер (панель сверху со временем, извините, не знаю имени, не могу вспомнить прямо сейчас)
  3. нажмите "USB-соединение"
  4. , в котором отображается содержимое карты SD
  5. нажмите "Отключить USB-накопитель", когда закончите
  6. отключите USB-кабель (если хотите), и тогда ваш Droid сможет снова прочитать SD-карту
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...