Подтвердить что ты не робот

Каталог данных не имеет права на чтение и запись в 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());
        }
    }
4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

OutputStream os = openFileOutput("samplefile.txt", MODE_PRIVATE);
BufferedWriter lout = new BufferedWriter(new OutputStreamWriter(os));