我正在尝试将一个项目添加到存储在文件中的列表中。创建FileWriter实例时,我的行为很奇怪。如果将“ true”传递给构造函数中的“ append”参数(新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;
}
}
预期结果:要在文件末尾添加新项目。
答案 0 :(得分:0)
重写此阻止代码:
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))可以完美地在我的文件中添加新项目。非常愚蠢(