【发布时间】:2019-10-28 08:36:24
【问题描述】:
我目前有一堆 XML 文件(每个大小为 16kb)需要转换为 JSON,然后写入新文件。我有一个可行的实现,但速度很慢。
我正在做的是抓取目录中的每个文件,将 XML 数据转换为字符串,使用 org.json 创建该字符串的 JSON 对象,然后使用 FileWriter 将其写入文件
import org.json.JSONObject;
import org.json.XML;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import org.apache.commons.io.FilenameUtils;
public class TestConvert {
public static void main(String[] args) {
final File xmlFolder = new File("C:\\files\\xml_files");
final File jsonFolder = new File("C:\\files\\json_files");
for(File fileEntry: xmlFolder.listFiles()){
try {
String xml = new String(Files.readAllBytes(fileEntry.toPath()), StandardCharsets.UTF_8);
JSONObject obj = XML.toJSONObject(xml);
String completeDir = jsonFolder + "\\" + FilenameUtils.removeExtension(fileEntry.getName()) + ".json";
FileWriter file = new FileWriter(completeDir);
obj.write(file);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
这确实有效,但是我目前正在使用大约 370k XML 文件进行测试,运行时间超过 45 分钟。这似乎太过分了,我真的很想缩短完成这项工作所需的时间。
【问题讨论】:
-
您可以使用多线程在更短的时间内完成该过程。生成线程数并为每个线程分配多个 xml 文件。
-
您的 XML 文件有多大?有多少元素和深度?据我们所知,这可能是一个非常快的时间!
-
说得好,杰米。谢谢你。每个文件大小为 16kb。我相信它会达到 10 或 11 的深度。
-
你考虑过 xslt 吗?
-
不知道会不会更快,但是试试jackson库,这个,使用线程池,将不同的文件拆分到不同的线程。
标签: java json xml file file-writing