我正在尝试替换同一文件中Word文档中的一些单词。
public class WordEdit {
static String DocX;
static String DocX2;
public static void main(String[] args) throws Exception {
DocX = "C:\\Users\\aneesh.shaik\\Downloads\\I&TF-0206-2024.docx";
DocX2 = "D:\\Automation\\Files\\I&TF-0206-2024.docx";
XWPFDocument doc = new XWPFDocument(OPCPackage.open(DocX));
for (XWPFTable tbl : doc.getTables()) {
for (XWPFTableRow row : tbl.getRows()) {
for (XWPFTableCell cell : row.getTableCells()) {
for (XWPFParagraph p : cell.getParagraphs()) {
for (XWPFRun r : p.getRuns()) {
String text = r.getText(0);
if (text != null && text.contains("Aneesh423")) {
text = text.replace("Aneesh423", "Aneesh");
System.out.println("find 2");
r.setText(text,0);
}
}
}
}
}
}
doc.write(new FileOutputStream(DocX)); // Getting error on this line
doc.close();
}
}
如果我将其写入 DocX2 文件位置,那么它可以正常工作。但如果我想将其写入 DocX 文件位置的同一文档中,则会出现错误。
请帮忙解决这个问题。
尝试写入同一文件时遇到的错误可能是由于文件被打开或锁定所致,如果文件正在被其他进程或应用程序访问,则可能会发生这种情况。当您测试写入不同位置(例如驱动器 D)时,该文件当时可能尚未被其他进程锁定,从而允许写入操作成功。
为了防止此类冲突,最好先将修改的内容写入新文件,如我之前提供的代码片段所示。这样,您就可以避免与文件锁定相关的潜在问题,确保成功创建更新的文档。
DocXnew = "C:\\Users\\aneesh.shaik\\Downloads\\I&TF-0206-2024_new.docx";
try (FileOutputStream out = new FileOutputStream(DocXnew)) {
doc.write(out);
System.out.println("File updated successfully.");
} catch (IOException e) {
e.printStackTrace();
}
doc.close();
代码行
XWPFDocument doc = new XWPFDocument(OPCPackage.open(DocX));
通过打开XWPFDocument
后面的文件来创建DocX
并让文件保持打开状态。这节省了一点随机存取存储器。但当然不能向打开的文件写入任何内容。
如果您要使用
XWPFDocument doc = new XWPFDocument(new FileInputStream(DocX));
,那么这将通过使用 XWPFDocument
读取 DocX
后面的文件内容来创建 FileInputStream
。文件不会保持打开状态,并且 FileOutputStream
可以写入同一个文件。