一、核心代碼分析:
spire.doc官網: https://www.e-iceblue.com/
import com.spire.doc.Document;
//import javax.swing.text.Document;
import com.spire.doc.FileFormat;
Document document = new Document(file.getPath());
//使用新文本替換文檔中的指定文本,參數1爲源,參數2爲替換後的內容
document.replace(key, map.get(key), false, true);
//替換後的文檔保存文檔
document.saveToFile("D:\\替換工具\\目標文件\\"+file.getName(), FileFormat.Docx_2013);
二、 完整實現
package com.example.file;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import com.spire.doc.Document;
//import javax.swing.text.Document;
import com.spire.doc.FileFormat;
/**
*author:bingbing
*日期:2020年6月27日
*時間:下午4:29:08
*/
public class ReplaceWordContent {
public static void main(String[] args) throws IOException {
String directory="D:\\替換工具\\源文件";
//獲取到所有的file
File directoryFile=new File(directory);
File [] lists=directoryFile.listFiles();
System.out.println("包含的文件有:"+Arrays.toString(lists));
for(int i=0;i<lists.length;i++) {
replaceWordMutilFiles(lists[i]);
}
System.out.println("替換完畢!");
}
private static void replaceWordMutilFiles(File file) throws IOException {
Document document = new Document(file.getPath());
File source=new File("D:\\替換工具\\查找內容-替換內容.txt");
//讀取出需要替換的文件內容
// 查找內容 替換內容
// 毛永 BBB
InputStreamReader reader = new InputStreamReader(new FileInputStream(source),"UTF-8");
BufferedReader bufIn = new BufferedReader(reader);
String line=null;
Map<String,String> map=new HashMap<String,String>();
int count=0;
while ( (line = bufIn.readLine()) != null) {
count++;
// 替換每行中, 符合條件的字符串
System.out.println("行:"+line);
if(line!=null&&line!="") {
String str[]=line.split(" ");
System.out.println("分割後的數組:"+Arrays.toString(str)+"長度爲:"+str.length);
if(count!=1&&str.length!=1) {
map.put(str[0], str[str.length-1]);
}
}
}
System.out.println("需要替換的內容爲:"+map);
//替換所有文件下的對應的Key個value
//使用新文本替換文檔中的指定文本,參數1爲源,參數2爲替換後的內容
//遍歷map,獲取Key和value
Set<String> keys = map.keySet(); //此行可省略,直接將map.keySet()寫在for-each循環的條件中
for(String key:keys){
System.out.println("key值:"+key+" value值:"+map.get(key));
//批量替換文件
document.replace(key, map.get(key), false, true);
}
//保存文檔
document.saveToFile("D:\\替換工具\\目標文件\\"+file.getName(), FileFormat.Docx_2013);
}
}