【问题标题】:When append "true" in FileWriter, items delete from list在 FileWriter 中附加“true”时,项目会从列表中删除
【发布时间】:2019-10-30 08:26:20
【问题描述】:

我正在尝试将一个项目添加到存储在文件中的列表中。当我创建 FileWriter 的实例时,我遇到了一个奇怪的行为。如果将“true”传递给构造函数中的“附加”参数(new BufferedWriter(new FileWriter(filename, 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;
}

}

预期结果:要在文件末尾添加新项目。

【问题讨论】:

    标签: java android android-file


    【解决方案1】:

    重写此块代码:

    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(new FileWriter(filename, true)) 非常适合在我的文件中添加新项目。很傻(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-20
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多