以自定义保存方法覆盖旧条目



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

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

在全球或保存方法之外声明arraylist。因为每次在呼叫save((方法上,新对象为列表创建新对象,并使用新数据覆盖以前的数据,而不是在列表上添加新数据。

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

最新更新