Предыдущая запись перезаписывает старую запись с помощью пользовательского метода сохранения - PullRequest
0 голосов
/ 13 мая 2019

У меня есть собственный метод сохранения, который я использую в проекте. Каждый раз, когда я вызываю метод, я пытаюсь вставить следующую запись в новую строку в текстовом файле.

Например, если я введу «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 голосов
/ 13 мая 2019

Объявите ArrayList глобально или вне метода сохранения.Потому что каждый раз при вызове метода save () новый объект создается для списка и заменяет предыдущие данные новыми данными вместо добавления новых данных в список.

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