android - 上一个条目使用自定义保存方法覆盖旧条目
问题描述
我有一个在项目中使用的自定义保存方法。每次调用该方法时,我都希望在文本文件的新行中插入下一个条目。
例如,如果我在第一个方法调用中输入“dog1”,那么在下一个方法调用中输入“dog2”。输出应该是
dog1
dog2
不幸的是 dog2 覆盖了 dog1 所以我的文本文件输出总是包含一个条目。
有人注意到我的代码有什么问题吗?谢谢!
public void save(String filename, String st,
Context ctx) {
ArrayList<String[]> list = new ArrayList<>();
list.add(new String[] {st});
FileOutputStream fos;
try {
fos = ctx.openFileOutput(filename, Context.MODE_PRIVATE);
OutputStreamWriter os= new OutputStreamWriter(fos);
String t = st;
for(String[] arr: list){
for(String s: arr){
os.write(s);
}
os.write(System.getProperty( "line.separator" ));
}
os.flush();
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
文件阅读器方法
public String read(String filename, Context ctx){
String tr="";
FileInputStream fis = null;
try {
fis=ctx.openFileInput(filename);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
StringBuilder sb= new StringBuilder();
String text;
while((text=br.readLine())!=null){
sb.append(text);
tr = sb.toString();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fis!=null){
try{
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return tr;
}
解决方案
全局或在 save 方法之外声明 ArrayList。因为每次调用 save() 方法时,都会为列表创建新对象并用新数据覆盖以前的数据,而不是在列表中添加新数据。
Declare below line outside save() method or globally
ArrayList<String[]> list= new ArrayList<>();
推荐阅读
- php - 如何在两个嵌套的 symfony 应用程序中设置正确的配置?
- reactjs - React - 如何过滤按钮
- sql - 如果该特定项的另一个条目/值也存在,如何获取另一个“标记”值
- scala - 带有双冒号的 Finch 中的 Scala Post 方法
- python - Django中的评论线程
- javascript - expressjs server.js 这是未定义的,我如何引用服务器
- c# - 使用 SharePoint CSOM 获取子文件夹
- sql - 如何在oracle中找到将行限制为前1
- react-router-v4 - React 路由器 + SSR + 水合物
- heroku - 如何撤消 Heroku 回滚