Android无法将文本写入资源文件

时间:2014-01-30 19:21:24

标签: java android

我在res(res / raw)中创建了一个原始文件夹,我还创建了my_text_file.txt文件。
现在我想在这个文件中写点什么 我写了一些代码,但我不能写(例如)一个简单的字符串。

这是我的代码。

如果有人知道我的代码有什么问题,请帮帮我

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.
            }

2 个答案:

答案 0 :(得分:0)

您可以读取文件,但不能更改资源文件夹中的文件。 您可以做的是将文件保存在外部存储器中,然后开始更改文件。

别忘了设置权限:

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

答案 1 :(得分: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();
}