我有一个在项目中使用的自定义保存方法。每次调用该方法时,我都希望在文本文件的新行中插入下一个条目。
例如, 如果我在第一个方法调用中输入“ 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;
}
答案 0 :(得分:1)
全局或在save方法外部声明ArrayList。 因为每次调用save()方法时,新对象都会为列表创建并用新数据覆盖以前的数据,而不是在列表上添加新数据。
Declare below line outside save() method or globally
ArrayList<String[]> list= new ArrayList<>();