2010-01-04 4 views
21

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

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()); 
     } 
    } 

ответ

64

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

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

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

Если вы хотите получить путь к SD-карте, используйте Environment.getExternalStorageDirectory() method. Для того, чтобы написать на 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)); 
+0

Здесь ват м tryng сделать: собственной недействительным writeToSDCard() { попробовать { \t Файл lroot = Environment.getDataDirectory(); \t \t if (lroot.canWrite()) { \t Файл lfile = new Файл (lroot, "samplefile.txt"); \t FileWriter lfilewriter = new FileWriter (lfile); \t BufferedWriter lout = new BufferedWriter (lfilewriter); \t lout.write ("XXXXXXXXXXXXXXXXXX"); \t lout.close(); \t} \t} catch (IOException e) { \t Log.e (m_cTAG, «Не удалось записать файл» + e.getMessage()); \t} } –

+0

Yea Спасибо за ваше ценное предложение .. :-) –

+0

Спасибо, что решил мою проблему. – specialscope

Смежные вопросы