如何使用commons.io.FileUtils读取/写入docx文件?

时间:2016-11-10 20:27:02

标签: java file-io docx fileutils apache-commons-io

需要一些快速帮助。我正在尝试编写一个java程序来生成报告。我在docx文件中有报告模板。

我想要做的是,将该docx文件用作模板,并将数据多次放入其中以用于各种记录,并将其写入新的docx文件。主要的是我想维护docx文件中内容的格式和缩进。它们是子弹数据。那就是问题所在。

以下是处理上述操作的代码,

    public void readWriteDocx(HashMap<String, String> detailsMap) {
    try {
        File reportTemplateFile = new File("ReportTemplate.docx");
        File actualReportFile = new File("ActualReport.docx");

        StringBuilder preReport = new StringBuilder();
        preReport.append("Some details about pre report goes here...: ");
        preReport.append(System.lineSeparator());

        String docxContent = "";
        for (Map.Entry<String, String> entry : detailsMap.entrySet()) {
            docxContent = FileUtils.readFileToString(reportTemplateFile, StandardCharsets.UTF_8);

            // code to fetch and get data to insert into docxContent

            docxContent = docxContent.replace("$filename", keyFilename);
            docxContent = docxContent.replace("$expected", expectedFile);
            docxContent = docxContent.replace("$actual", actualFile);
            docxContent = docxContent.replace("$reportCount", String.valueOf(reportCount));
            docxContent = docxContent.replace("$diffMessage", key);

            FileUtils.writeStringToFile(actualReportFile, docxContent, StandardCharsets.UTF_8, true);

        }
        preReport.append(FileUtils.readFileToString(actualReportFile, StandardCharsets.UTF_8));
        System.out.print(preReport.toString());

    } catch (IOException e) {
        e.printStackTrace();
    }
}

如您所见,我正在使用FileUtils读写方法并使用UTF_8编码。这只是一个猜测,我不确定是一样的。我试图将新生成的docx文件内容附加到字符串生成器并在控制台上打印,但这是次要的。主要的是docx应该正确编写。但没有运气。

当打印时,它的所有奇怪的字符都没有可读性。当我尝试打开新生成的docx文件时,它甚至不会打开。

知道如何以正确的格式获取数据。我附加了我的ReportTemplate.docx看起来的图像文件,我用作模板来生成此报告。我正在使用commons-io-2.4.jar

ReportTemplate.docx file

如果可以,请指导。非常感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用Apache POI创建和编辑doc docx文件或docx4j。否则,没有这些库就没有简单的方法来编辑doc或docx文件。