我已经搜索了很多,但似乎较旧的答案是错误的,因为存储似乎已从数据/数据更改,并且权限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 ();}
}
;
}
答案 0 :(得分:0)
不推荐使用WRITE_INTERNAL_MEMORY
权限这一事实并不意味着您不能再写入内部存储器了。实际上,情况恰恰相反 - 谷歌认为没有必要在私人内部文件夹中编写/创建文件。
您可以通过方法getFilesDir()
获取私有应用程序存储文件夹的路径这是编写私人文件的最佳位置,特别是为此目的。
谷歌在文档中写道:您无需任何权限即可在内部存储上保存文件。您的应用程序始终有权在其内部存储目录中读取和写入文件。
来源和更多信息 - http://developer.android.com/training/basics/data-storage/files.html