首页 > 解决方案 > 上一个条目使用自定义保存方法覆盖旧条目

问题描述

我有一个在项目中使用的自定义保存方法。每次调用该方法时,我都希望在文本文件的新行中插入下一个条目。

例如,如果我在第一个方法调用中输入“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;
}

标签: androidarraylistsavewritefile

解决方案


全局或在 save 方法之外声明 ArrayList。因为每次调用 save() 方法时,都会为列表创建新对象并用新数据覆盖以前的数据,而不是在列表中添加新数据。

 Declare below line outside save() method or globally
 ArrayList<String[]> list= new ArrayList<>();

推荐阅读