gpt4 book ai didi

java - 实时写入并删除文件 JAVA 中的最后一个字符

转载 作者:行者123 更新时间:2023-12-01 16:54:48 28 4
gpt4 key购买 nike

我正在将 txt 转换为 json,并且我正在使用 json-simple。我希望实时写入文件,即每一行,为此我选择不使用 JsonArray,因为如果我使用 JSONArray,我必须先等待它完成,然后将其写入文件。所以我只使用 JsonObjects。问题是我必须创建一个“隐藏”JsonArray,为此我在文件的开头和结尾添加方括号,然后为每个 JsonObject 添加一个逗号。明显在文件末尾“]”之前打印逗号的问题,如何删除最后一个逗号?

    br = new BufferedReader(new FileReader(pathFile + ".txt"));
JSONObject stringDetails = new JSONObject();
JSONArray stringList = new JSONArray();
try (FileWriter file = new FileWriter(pathfile+".json",true)) {
file.write("[");
while ((line = br.readLine()) != null) {
//Miss the code to convert from txt string to json string ...
stringDetails.put(stringJson.getKey(), stringJson.getMessage());
file.write(String.valueOf(stringDetails)+",");
stringDetails = new JSONObject();
}
file.write("]");
}

还有一个问题是,使用append(true),万一程序异常停止,前面的字符串都被保存了吗?

非常感谢。

最佳答案

我看到两种可能的方法,并且这两种方法都是首先不打印它的必要解决方案。

首先:在 while 循环中使用 boolean 和 if 语句来打印条目之前的逗号(第一个除外)

boolean isFirst = true;

file.write("[");
while ((line = br.readLine()) != null) {
//Miss the code to convert from txt string to json string ...
stringDetails.put(stringJson.getKey(), stringJson.getMessage());

if (isFirst) {
isFirst = false;
} else {
// print the comma before the new entry
file.write(",");
}

file.write(String.valueOf(stringDetails));
stringDetails = new JSONObject();
}
file.write("]");

第二:第二种方法是使用私有(private)辅助方法来打印文件的条目,例如:

private static void printEntry(FileWriter file, String line, ... /* what ever else you need*/) {
//Miss the code to convert from txt string to json string ...
stringDetails.put(stringJson.getKey(), stringJson.getMessage());
file.write(String.valueOf(stringDetails));
stringDetails = new JSONObject();
}

并使用它从 while 循环中提取第一个条目的内容,例如:

file.write("[");
if ((line = br.readLine()) != null) {
// print first entry
printEntry(file, line, ...);

// print the rest
while ((line = br.readLine()) != null) {
file.write(",");

printEntry(file, line, ...);
}
}
file.write("]");

关于java - 实时写入并删除文件 JAVA 中的最后一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61608733/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com