2014-01-30 3 views
0

Я создал необработанную папку внутри res (res/raw), а также создал файл my_text_file.txt.
Теперь я хочу что-то написать в этом файле.
Я написал код, но я не могу написать (например) простую строку.Android не может записать текст в файл ресурсов

Это мой код.

Если кто-нибудь знает, что это неправильно в моем коде, пожалуйста, помогите мне

try { 
       FileOutputStream fos = openFileOutput("my_text_file.txt", 
         Context.MODE_PRIVATE); 
       OutputStreamWriter osw = new OutputStreamWriter(fos); 
       osw.write("17"); 
       osw.flush(); 
       osw.close(); 
      } catch (java.io.IOException e) { 
       // do something if an IOException occurs. 
      } 
+0

Вы не можете писать в файлы ресурсов. .. – gunar

+0

не возможно? – user3233500

+0

Возможный дубликат [Android и ObjectOutputStream для файла ресурсов] (http://stackoverflow.com/questions/8747713/android-and-objectoutputstream-to-resource-file) – kabuko

ответ

0

Вы можете читать файл, но не изменять файл на папку ресурсов. Что вы можете сделать, так это сохранить файл во внешнем хранилище, а затем начать изменять файл.

Не забудьте установить разрешение:

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

спасибо, я также пользуюсь этим разрешением. Моя проблема is.first время я пишу код whitch может создать txt-файл в sdcard, но я хочу, чтобы этот файл показывал только решение проблемы me.meybe, чтобы скрыть этот файл txt на sdcard, но для моего варианта это невозможно – user3233500

+0

Можете ли вы объяснить, почему? Возможно, вы можете попробовать другое решение, вы можете установить точку перед именем вашей папки «.myapp/text.txt», таким образом, пользователь не может получить доступ к вашему контенту с Android или Unix на основе ПК – GhostDerfel

+0

Если вы хотите, чтобы файл отображался только для вас вы можете сохранить его в папке вашего приложения, например: 'String absoluteFilePath = getApplicationContext(). getFilesDir(). getPath() +"/"+ имя_файла; FileOutputStream fileOut = новый FileOutputStream (absoluteFilePath); 'таким образом только ваше приложение сможет получить к нему доступ. – Piovezan

0

Вы не должны писать файлы ресурсов. Он существует для хранения данных, которые вы поставили перед компиляцией. Если вы хотите сохранить информацию в файле, во время выполнения вы можете сделать что-то вроде этого:

public static void writeToFile(String fileName, String encoding, String text) { 
    Writer writer = null; 

    try { 
     writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), encoding)); 
     writer.write(text); 
    } catch (IOException ex) { 
     Log.e(TAG, "", ex); 
    } finally { 
     try { 
      writer.close(); 
     } catch (Exception ex) { 
     } 
    } 
} 

Чтобы найти путь к SD карте вы можете использовать этот метод:

Environment.getExternalStorageState() 

Таким образом, вы можете использовать этот метод как это:

writeToFile(Environment.getExternalStorageState() + "/" + "my_text_file.txt", "UTF-8", "my_text"); 

не забыли установить разрешения

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

UPD: Вы не должны использовать SD-карту, чтобы сохранить некоторую защищенную информацию! Дополнительная информация here.

Чтобы написать данные, которые будут доступны только для вашего приложения, используйте этот код:

public static void writeToInternalFile(String fileName, String text) { 
    FileOutputStream fos = openFileOutput(fileName, Context.MODE_PRIVATE); 
    fos.write(text.getBytes()); 
    fos.close(); 
} 

Чтобы прочитать из этого файла:

public static String readFromInternalFile(String fileName) { 
    FileInputStream fis = openFileInput(, Context.MODE_PRIVATE); 
    StringBuilder sb = new StringBuilder(); 
    int ch; 
    while((ch = fis.read()) != -1){ 
     sb .append((char)ch); 
    } 
    return sb.toString(); 
} 
Смежные вопросы