前言
使用Jsoup解析html,解析完成后替换html内容并删除源文件生成新文件
代码示例
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.*;
import java.util.ArrayList;
public class Modify{
private String path;
private static final ArrayList<String> list = new ArrayList<>();
public Modify(String path) {
// 操作目录。从该目录开始。该文件目录下及其所有子目录的文件都将被替换。
this.path = path;
operation();
}
private void operation() {
File file = new File(path);
opeationDirectory(file);
}
public void opeationDirectory(File dir) {
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
File f = files[i];
if (f.isDirectory()){
// 如果是目录,则递归。
opeationDirectory(f);
}
if (f.isFile()){
//判断文件是否是html
if(f.getName().endsWith("shtml") || f.getName().endsWith("html")){
operationFile(f);
}
}
}
}
public void operationFile(File file) {
try {
String filename = file.getName();
// tmpfile为缓存文件,代码运行完毕后此文件将重命名为源文件名字。
File tmpfile = new File(file.getParentFile().getAbsolutePath() + "\\" + filename + ".tmp");
BufferedWriter writer = new BufferedWriter(new FileWriter(tmpfile));
boolean flag = false;
int number = 0;
//解析html文件
Document doc = Jsoup.parse(file, "UTF-8");
//获取href标签及标签内容
Elements href = doc.getElementsByAttribute("href");
//遍历获取到的标签
for (Element e : href) {
for(int j = 0; j < list.size(); j++){
if(list.get(j).contains(e.attr("href"))){
//替换获取到的href内容
e.attr("href", "#");
System.out.println("修改完成文件名称为" + file.getPath());
System.out.println("文件原始内容为" + e.attr("href"));
number ++;
}
}
}
//判断源文件是否修改如修改则将html内容添加到临时文件中
if(number != 0){
writer.write(doc.toString());
flag = true;
}
writer.flush();
writer.close();
if (flag) {
//删除源文件将新生成的文件修改为源文件名称
file.delete();
tmpfile.renameTo(new File(file.getAbsolutePath()));
} else{
tmpfile.delete();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
//测试代码块 将需要替换的链接放到 lianjie.txt 文件中,每个要替换的文字或链接需要换行
File file = new File("C:\\Users\\sanlang\\Desktop\\lianjie.txt");
BufferedReader br = new BufferedReader(new FileReader(file));
String st;
while ((st = br.readLine()) != null){
list.add(st);
}
//需要替换的 html文件目录
new Modify("C:\\Users\\Desktop\\2010");
}
}