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