В доступе отказано: файл создан в ... / files - PullRequest
4 голосов
/ 07 января 2010

Я создаю файл в data / data / myPackage / files /:

file = new File( getFilesDir() + "/file.txt");

Я абсолютно уверен, что файл создан.
Сразу после его создания я звоню:

file.canWrite();

и результат верный.

Когда я пытаюсь использовать этот файл
Я получаю: «Отказано в доступе».
В Eclipse, в DDMS, права доступа к этому файлу:

-rw-------

Может кто-нибудь помочь здесь?

Спасибо

Ответы [ 6 ]

9 голосов
/ 23 июля 2011

Убедитесь, что у вас есть правильные разрешения на запись в файл. В файле манифеста включите эту строку

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />.
8 голосов
/ 07 января 2010

Самый простой способ открыть файл (и создать его одновременно) - использовать метод openFileOutput("file.txt", MODE_PRIVATE).

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

3 голосов
/ 07 января 2010

Разрешения выглядят правильно для меня. Каждое приложение запускается как отдельный пользователь, поэтому имеет доступ только к своим файлам.

Когда вы говорите «Я пытаюсь использовать этот файл», что вы имеете в виду? Можете ли вы опубликовать код для этого, так как я думаю, что именно в этом проблема.

1 голос
/ 04 февраля 2012

Я работал над проблемой nullpointerexception, файл не найден, несколько часов. Я перешел с эмулятора на реальное устройство. В эмуляторе работало следующее:

BufferedWriter osw = new BufferedWriter(new FileWriter(path));

Когда я пошел прямо к устройству, я получил исключение.
Нилеш Гаджендер отлично ответил. Добавление:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

в манифесте андроида решает эту проблему полностью. Я благодарен Нилеш и Слава!

1 голос
/ 08 января 2010

Если вы знаете, что файл создается с помощью File (), и вы не хотите использовать openFileOutput (), попробуйте следующее:

FileWriter fWriter;
try {
    fWriter = new FileWriter(file, true);
    fWriter.write("hello");
    fWriter.close();
} catch (IOException e) {
    // log error
}
0 голосов
/ 08 января 2010

Я обнаружил, что для записи в '/ data / data / myPackage / files /' необходимо установить разрешения
.

Был MODE_WORLD_WRITEABLE,
, который был интересен для этого случая,
, но даже с этим набором разрешений я все еще получил ошибку.

Я подумал: «Может быть, мне нужно разрешение EXECUTE ...».
В API такого разрешения нет
, хотя я пытался поставить 3 в параметре mode
(MODE_WORLD_WRITEABLE = 2),
и ... это сработало!

Но когда я пишу на SD-карту с этим набором разрешений,
Я также получаю сообщение об ошибке
, поэтому я пишу по-разному в две папки.И, кстати,
MODE_WORLD_WRITEABLE неверно,
MODE_WORLD_WRITABLE верно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...