【发布时间】:2020-12-08 17:51:38
【问题描述】:
我已经从我的数据库中的 json 文件中提取了我的表,现在我想读取这些文件并删除它们上的所有双引号,看起来很简单并且尝试了数百种解决方案,有些让我遇到了内存不足的问题。我正在处理大小超过 1Gb 的文件。您将在下面找到的代码有一个奇怪的行为,我不明白为什么它返回空文件
public void replaceDoubleQuotes(String fileName){
log.debug(" start formatting " + fileName + " ...");
File firstFile = new File ("C:/sqlite/db/tables/" + fileName);
String oldContent = "";
String newContent = "";
BufferedReader reader = null;
BufferedWriter writer = null;
FileWriter writerFile = null;
String stringQuotes = "\\\\\\\\\"";
try {
reader = new BufferedReader(new FileReader(firstFile));
writerFile = new FileWriter("C:/sqlite/db/tables/" + fileName);
writer = new BufferedWriter(writerFile);
while (( oldContent = reader.readLine()) != null ){
newContent = oldContent.replaceAll(stringQuotes, "");
writer.write(newContent);
}
writer.flush();
writer.close();
} catch (Exception e) {
log.error(e);
}
}
当我尝试使用FileWriter(path,true)在文件末尾写入时,程序不会停止增加文件内存,直到硬盘已满,谢谢帮助
ps:我也尝试使用 subString 并附加新内容,然后我写了 subString 但也不起作用
【问题讨论】:
-
您似乎将数据库文件视为由文本行组成。我对 SQLite 一无所知,但这似乎不太可能。
-
我还想知道什么 db 通常以 JSON 格式转储其数据,但我认为这与问题无关。还是很高兴知道。
-
源文件
new File ("C:/sqlite/db/tables/" + fileName)与目标new FileWriter("C:/sqlite/db/tables/" + fileName)相同?
标签: java bufferedreader filewriter