将文本添加到现有txt文件时出错

时间:2014-03-03 16:44:18

标签: android

首先,我知道这个网站有相同的问题,但我无法在现有的txt文件中添加文字。也许我错过了什么,但在哪里?无论如何,这是我的代码。

我有translate.txt文件。它是/ raw folder.and当我单击按钮时,必须将editTexts(w1,w2)中写的单词添加到现有的translate.txt文件中。但它不起作用..

public class Add extends Activity {

EditText w1,w2;
Button save;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add);

    w1=(EditText)findViewById(R.id.idText1);
    w2=(EditText)findViewById(R.id.idText2);
    save=(Button) findViewById(R.id.idSave);

    save.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {

            String word1=w1.getText().toString();
            String word2=w2.getText().toString();
            writefile(word1,word2);


        }

    });



}

public void writefile(String word1,String word2)

{
    try
    {
        String finalstring=new String(word1 + " " + word2);
        FileOutputStream fOut = openFileOutput("translate.txt",MODE_APPEND);
        OutputStreamWriter osw = new OutputStreamWriter(fOut);
        osw.write(finalstring);
        osw.flush();
        osw.close();
        Toast.makeText(this, "Saved", Toast.LENGTH_SHORT).show();
    } catch(Exception e)
        {
        Toast.makeText(this, "ERROR!!!", Toast.LENGTH_SHORT).show();
        }

}

}

2 个答案:

答案 0 :(得分:1)

A)在Android中编写APPEND文件的代码

public void writefile(String word1,String word2)
        try {
                    String path = sdCard.getAbsolutePath() + "/";

        File logFile = new File(path + "translate.txt");
        if (!logFile.exists()) {
            logFile.createNewFile();
        }

        // BufferedWriter for performance, true to set append to file

        FileWriter fw = new FileWriter(logFile, true);
        BufferedWriter buf = new BufferedWriter(fw);


            buf.append(word1 + " " + word2);
            buf.newLine();
            buf.flush();

        }
        buf.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

B)规则/许可 的的AndroidManifest.xml

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

编辑对于用户

您无法将文件写入原始文件夹。它是只读的。准确地说,您无法动态修改“Res”文件夹中包含的任何内容。

检查一下,https://stackoverflow.com/a/3374149

答案 1 :(得分:1)

以防您不想将数据存储在SD卡中并想要使用以前的方法 您创建文件和向其添加数据的方式实际上并不是在res / raw文件夹中编辑文件(因为它无法编辑)

但您编写的数据实际上存储在与此Context的应用程序包关联的私有文件中以供阅读。

因此它就在那里,文件可以按如下方式阅读:

    private void readFile() {
    // TODO Auto-generated method stub
    try {
        FileInputStream fin = openFileInput("translate.txt");
        InputStreamReader isr = new InputStreamReader(fin);
        BufferedReader br = new BufferedReader(isr);
                    String str;
                    StringBuilder str2 = new StringBuilder();
        while ((str = br.readLine()) != null) {
            str2 = str2.append(str);
        }
        isr.close();
        editText.setText(str2.toString());
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

你可以按照这种方法,因为你不想将文件存储在SD卡中,因为任何人都可以阅读sd crad中的文件。