jsoup批量替换html中的超链接

前言

使用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");
    }
}

总结

以上代码未开启多线程如html文件过多可开启线程执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

年轻的河神呀

爷,来个赏钱呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值