Каталог данных не имеет разрешения на чтение/запись в Android

Я использую Android 1.5, у моего каталога данных нет прав на чтение/запись.

System.out.println("DAta can write??--->"+Environment.getDataDirectory().canWrite());
System.out.println("DAta can read??--->"+Environment.getDataDirectory().canRead());

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

Я пытаюсь создать файл и добавить к нему некоторый контент в хранилище данных эмулятора, как показано ниже.

private void writeToSDCard() {
        try {

            File lroot = Environment.getDataDirectory();

            if (lroot.canWrite()){
                File lfile = new File(lroot, "samplefile.txt");
                FileWriter lfilewriter = new FileWriter(lfile);
                BufferedWriter lout = new BufferedWriter(lfilewriter);
                lout.write("XXXXXXXXXXXXXXXXXX");
                lout.close();
            }
        } catch (IOException e) {
            Log.e(m_cTAG, "Could not write file " + e.getMessage());
        }
    }

person Vinayak Bevinakatti    schedule 04.01.2010    source источник


Ответы (1)


Вы не должны смотреть на каталог данных. Это системный каталог в памяти телефона — обычно /data — и ваше приложение никогда не будет иметь разрешения на запись в него.

Каталог, в который ваше приложение должно записывать файлы, возвращается методом Context.getFilesDir()< /а>. Это будет что-то вроде /data/data/com.yourdomain.YourApp/files.

Если вы хотите записать файл в память телефона, используйте Context.openFileOutput()метод.

Если вам нужен путь к SDCard, используйте метод Environment.getExternalStorageDirectory(). Чтобы записать на SDCard, вам нужно предоставить вашему приложению соответствующие разрешения, добавив в свой манифест следующее:

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

Если вы собираетесь писать на SD-карту, вам также необходимо проверить ее состояние с помощью метода getExternalStorageState().

Если вы храните небольшие файлы для своего приложения, они могут попасть в память телефона, а не на SD-карту, поэтому используйте методы Context.openFileOutput() и Context.openFileInput().

Итак, в вашем коде рассмотрите что-то вроде:

OutputStream os = openFileOutput("samplefile.txt", MODE_PRIVATE);
BufferedWriter lout = new BufferedWriter(new OutputStreamWriter(os));
person Dave Webb    schedule 04.01.2010
comment
Вот что я пытаюсь сделать: private void writeToSDCard() { try { File lroot = Environment.getDataDirectory(); if (lroot.canWrite()){ Файл lfile = новый файл(lroot, samplefile.txt); FileWriter lfilewriter = новый FileWriter(lfile); BufferedWriter lout = новый BufferedWriter(lfilewriter); груб.написать(ХХХХХХХХХХХХХХХ); хуй.закрыть(); } } catch (IOException e) { Log.e(m_cTAG, Не удалось записать файл + e.getMessage()); } } - person Vinayak Bevinakatti; 04.01.2010
comment
Да, спасибо за ваше ценное предложение .. :-) - person Vinayak Bevinakatti; 04.01.2010
comment
Какие конкретные состояния внешнего хранилища позволят записать файл? - person Mark; 23.03.2014