При добавлении «true» в FileWriter элементы удаляются из списка - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь добавить элемент в список, который хранится в файле.И я испытываю странное поведение при создании экземпляра FileWriter для этого.Если значение «true» передается параметру «appended» в конструкторе (новый BufferedWriter (новый FileWriter (имя файла, true))), элемент не добавляется в список.Если я не передам параметр, элемент добавляется в список, но каждый раз перезаписывает существующий.Может ли кто-нибудь помочь мне с этим?

Что я пробовал:

-использование FileOutputStream - результат один и тот же, всегда перезаписывая элементы.

-добавлен Context.MODE_PRIVATE- результат один и тот же, всегда перезаписываются элементы.

- bw.append(convertTaskToGson(task));

private List<Task> fillListFromGson(FileInputStream imputeStream) {
    BufferedReader bufferedReader = prepareReadingFromFile(imputeStream);
    String receiveString;
    List<Task> taskList = new ArrayList<>();
    try {
        while ((receiveString = bufferedReader.readLine()) != null) {
            stringBuilder.append(receiveString);
            String jsonNewObject = stringBuilder.toString();
            Task task = gson.fromJson(jsonNewObject, Task.class);
            taskList.add(task);
        }
        return taskList;
    } catch (IOException e) {
        e.printStackTrace();
        Log.e(TAG_INTERNAL_FILE_ERROR, "cannot fill list from gson");
        return null;
    }
}


private boolean saveTaskToInternalStorage(Task task)  {
    BufferedWriter bw = null;
    try {
        File file = new File(AppClass.getApplication().getFilesDir(), filename);

        bw = new BufferedWriter(new FileWriter(filename, true));
        bw.write(convertTaskToGson(task));
        bw.newLine();
        bw.flush();
    } catch (IOException ioe) {
        ioe.printStackTrace();
        return false;
    } finally {
        if (bw != null)
            try {
            bw.close();
            return true;
        } catch (IOException ioe2) {
                return false;
            }
    } return true;
}

}

Ожидаемый результат: новые элементы будут добавлены в конец файла.

1 Ответ

0 голосов
/ 21 июня 2019

Перепишите этот код блока:

BufferedReader  inputStream = new BufferedReader(new                      InputStreamReader(getFileInputStream(internalFileName)));
        while ((receiveString = inputStream.readLine()) != null) {
            Task task = gson.fromJson(receiveString, Task.class);
            taskList.add(task);
        }

Моей ошибкой было неправильное включение StringBuilder, и это сломало отображение элементов файла. После переустановки приложения - BufferedWriter (новый FileWriter (имя файла, true)) отлично работает для добавления новых элементов в мой файл. Очень глупо (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...