Android - 读取和写入内部存储器的简单文本文件

时间:2014-03-21 12:12:00

标签: android file

我已经搜索了很多,但似乎较旧的答案是错误的,因为存储似乎已从数据/数据更改,并且权限WRITE_INTERNAL_MEMORY不再可用。我正在使用Eclipse。 我有一个多项选择测试,并希望存储用户给出的答案的状态: N =没有加入,C =上次正确,I =上次尝试不正确

因此文件需要可重写 - 将作为数组读取,然后覆盖新状态的数组。

首次运行时写入文件的代码是 - 你可以看到我刚刚将它改为现在写“N”而不是根据需要写入“N”。还有一个用于存储用户ID的单行txt文件:

public void RunFirst(View view) throws IOException{
         //need to initialise file as a list of N's:
         count = 0;
         StringBuilder sb = new StringBuilder();
         while(count<4){
         sb.append("N");
         sb.append("\n");
         count = count +1;
         };
         NsString = sb.toString();
         String progfile = "userprogress.txt";

         try {
             FileOutputStream fos = new FileOutputStream(progfile);
              fos = openFileOutput(progfile, Context.MODE_PRIVATE);
              fos.write(NsString.getBytes());
              fos.close();
            } catch (Exception e) {
              e.printStackTrace();
            }
         // read userID
 TextView usrID = (TextView)      findViewById(R.id.editTextUserNameInput);
         userID = usrID.getText().toString();
         Toast.makeText(getApplicationContext(), "Welcome" + userID, 
                    Toast.LENGTH_LONG).show();
         //save userID
         String usridfile = "userid.txt";
         try{
             FileOutputStream fosuserid = new FileOutputStream(usridfile);
         fosuserid = openFileOutput(usridfile, Context.MODE_PRIVATE);
         fosuserid.write(userID.getBytes());
         fosuserid.close();
         Toast.makeText(getApplicationContext(), "filesaved", 
                    Toast.LENGTH_LONG).show();
         } catch (Exception e) {
           e.printStackTrace();
         }
         }

从文件中读取:

private void readprogressfile(){
    //@Override

    try
    {
        Toast.makeText(getApplicationContext(), "b4 file", 
                Toast.LENGTH_LONG).show();
        InputStream input = openFileInput("userprogress.txt");
        InputStreamReader isr = new InputStreamReader(input);
        BufferedReader buffrdr = new BufferedReader(isr);
        userprog = new String [4];
        int size = input.available();
        byte[] buffer = new byte[size];
        count = 0;
        line = null;
        while(count <4){
            input.read(buffer);
            line = new String(buffer);
            userprog[count]= line;
            Toast.makeText(getApplicationContext(), "status:" + count + userprog[count], 
                    Toast.LENGTH_LONG).show();
            };
        input.close();

        // byte buffer into a string
        String text= new String(buffer);
        //txtContent.setText(text);
        Toast.makeText(getApplicationContext(), "after file", 
                Toast.LENGTH_LONG).show();
        TextView showfile = (TextView)findViewById(R.id.textViewShowAns);
        showfile.setText("Q status:"+ userprog[qno]);
    }catch (IOException e) {
        e.printStackTrace ();}
    }



;
    }

1 个答案:

答案 0 :(得分:0)

不推荐使用WRITE_INTERNAL_MEMORY权限这一事实并不意味着您不能再写入内部存储器了。实际上,情况恰恰相反 - 谷歌认为没有必要在私人内部文件夹中编写/创建文件。

您可以通过方法getFilesDir()

获取私有应用程序存储文件夹的路径

这是编写私人文件的最佳位置,特别是为此目的。

谷歌在文档中写道:

  

您无需任何权限即可在内部存储上保存文件。您的应用程序始终有权在其内部存储目录中读取和写入文件。

来源和更多信息 - http://developer.android.com/training/basics/data-storage/files.html