前一个条目使用自定义保存方法覆盖旧条目

时间:2019-05-13 15:09:09

标签: android arraylist save writefile

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

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

1 个答案:

答案 0 :(得分:1)

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

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