我正在开发一个应用程序,其中用户在某些文本字段中放置一些数字信息,应用程序应该将信息写入txt文件供以后使用,例如下次打开应用程序或刷新按钮按下数字应该从文件中读取并加载到相同的文本字段中,以便用户可以根据需要更改它们。虽然“编写器”和“加载器”功能似乎都在工作,但问题是每次调用“加载器”时,它都会加载来自某些先前保存的文件的数据,而不是“编写器”现在创建的文件。 ”。如果用户希望将新保存的数据加载到文本字段中,则需要关闭并再次重新打开应用程序。为了更好地解释这种情况,我在代码之后放了一些场景。任何想法有什么不对,可以做些什么?
以下是我用来将信息放入文件的代码,它运行正常:
public void writer(View view){
try {
FileOutputStream fos = openFileOutput("myfilename", Context.MODE_WORLD_WRITEABLE | Context.MODE_WORLD_READABLE);
PrintStream prntst = new PrintStream(fos);
txtEditor=(EditText)findViewById(R.id.editText1);
prntst.println (txtEditor.getText().toString());
txtEditor=(EditText)findViewById(R.id.EditText02);
prntst.println (txtEditor.getText().toString());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
这是我用来从文件中读取信息到某些ArrayList的代码,然后这个ArrayList用于填充文本字段,这也很好(精确意味着没有错误):
public void reader(View view){
try {
BufferedReader inputReader = new BufferedReader(new InputStreamReader(openFileInput("myfilename")));
Scanner scanner = new Scanner(inputReader);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
bld.add(line);
}
inputReader.close();
scanner.close();
txtEditor=(EditText)findViewById(R.id.editText1);
txtEditor.setText(bld.get(0));
txtEditor=(EditText)findViewById(R.id.EditText02);
txtEditor.setText(bld.get(1));
} catch (IOException e) {
e.printStackTrace();
txtEditor=(EditText)findViewById(R.id.editText1);
bld.add((txtEditor.getText().toString()));
txtEditor=(EditText)findViewById(R.id.EditText02);
bld.add((txtEditor.getText().toString()));
}
}
情景:
PS。变量bld是全局的,并在MainActivity中定义:
ArrayList<String> bld = new ArrayList<String>();
谢谢,
答案 0 :(得分:1)
在writer方法中,您正在关闭文件输出流:
fos.close();
但你肯定应该关闭打印流。
prntst.close();
关闭打印流将刷新流,然后关闭基础输出流。当你关闭输出流时,它不会知道有关在它上面构造的打印流的任何信息,所以不知道要刷新它。
答案 1 :(得分:1)
问题可能在于全局ArrayList变量'bld'。可以全局定义它,但可以在本地初始化它。
问题在于,您正在调用bld.get(0)
,但新值会附加在其后面。
添加第bld = new ArrayList<String>();
行
在你的“读者”功能中。