实时写入并删除文件中的最后一个字符 JAVA
Write in Real Time and Remove last character in file JAVA
我正在 json 中转换一个 txt,我正在使用 json-simple。
我希望文件实时写入,即每一行,为此我选择不使用 JsonArray,
因为如果我使用JSONArray,我必须先等待它完成,然后再写入文件。
所以我只使用 JsonObjects。
我必须创建一个 "hidden" 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 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("]");
我正在 json 中转换一个 txt,我正在使用 json-simple。 我希望文件实时写入,即每一行,为此我选择不使用 JsonArray, 因为如果我使用JSONArray,我必须先等待它完成,然后再写入文件。 所以我只使用 JsonObjects。 我必须创建一个 "hidden" 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 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("]");