java读取html文件,并获取body中所有的标签及内容的案例

 更新时间:2020年08月19日 11:05:48   作者:磨人小妖精  
这篇文章主要介绍了java读取html文件,并获取body中所有的标签及内容的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

这里的获取的是html文件中body中的所有标签以及内容

package com.lmt.service.file;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.Reader;

import org.springframework.stereotype.Component;
import com.lmt.config.UrlConstants;

@Component
public class ParseFile {

  /**
   * 解析html文件
   * @param file
   * @return
   */
  public String readHtml(File file){
    String body = "";
    try {
      FileInputStream iStream = new FileInputStream(file);
      Reader reader = new InputStreamReader(iStream);
      BufferedReader htmlReader = new BufferedReader(reader);
            
      String line;
      boolean found = false;
      while (!found && (line = htmlReader.readLine()) != null) {
        if (line.toLowerCase().indexOf("<body") != -1) { // 在<body>的前面可能存在空格
          found = true;
        }
      }
      
      found = false;
      while (!found && (line = htmlReader.readLine()) != null) {
        if (line.toLowerCase().indexOf("</body") != -1) {
          found = true;
        } else {
          // 如果存在图片,则将相对路径转换为绝对路径
          String lowerCaseLine = line.toLowerCase();
          if (lowerCaseLine.contains("src")) {
            
            //这里是定义图片的访问路径
            String directory = "D:/test";
            // 如果路径名不以反斜杠结尾,则手动添加反斜杠
            /*if (!directory.endsWith("\\")) {
              directory = directory + "\\";
            }*/
          //  line = line.substring(0, lowerCaseLine.indexOf("src") + 5) + directory + line.substring(lowerCaseLine.indexOf("src") + 5);
            /*String filename = extractFilename(line);
            line = line.substring(0, lowerCaseLine.indexOf("src") + 5) + directory + filename + line.substring(line.indexOf(filename) + filename.length());
          */
            // 如果该行存在多个<img>元素,则分行进行替代
            String[] splitLines = line.split("<img\\s+"); // <img后带一个或多个空格
            // 因为java中引用的问题不能使用for each
            for (int i = 0; i < splitLines.length; i++) {
              if (splitLines[i].toLowerCase().startsWith("src")) {
                splitLines[i] = splitLines[i].substring(0, splitLines[i].toLowerCase().indexOf("src") + 5)
                    + directory
                    + splitLines[i].substring(splitLines[i].toLowerCase().indexOf("src") + 5);
              }
            }
            
            // 最后进行拼接
            line = "";
            for (int i = 0; i < splitLines.length - 1; i++) { // 循环次数要-1,因为最后一个字符串后不需要添加<img
              line = line + splitLines[i] + "<img ";
            }
            line = line + splitLines[splitLines.length - 1];
          }
          
          body = body + line + "\n";
        }
      }
      htmlReader.close();
  //    System.out.println(body);
      
    } catch (Exception e) {
      e.printStackTrace();
    }
    return body;
  }
  
  /**
   * 
   * @param htmlLine 一行html片段,包含<img>元素
   * @return 文件名
   */
  public static String extractFilename(String htmlLine) {
    int srcIndex = htmlLine.toLowerCase().indexOf("src=");
    if (srcIndex == -1) { // 图片不存在,返回空字符串
      return "";
    } else {
      String htmlSrc = htmlLine.substring(srcIndex + 4);
      char splitChar = '\"'; // 默认为双引号,但也有可能为单引号
      if (htmlSrc.charAt(0) == '\'') {
        splitChar = '\'';
      } 
      String[] firstSplit = htmlSrc.split(String.valueOf(splitChar));
      String path = firstSplit[1]; // 第0位为空字符串
      String[] secondSplit = path.split("[/\\\\]"); // 匹配正斜杠或反斜杠
      return secondSplit[secondSplit.length - 1];
    }
  }
  
}

补充知识:StandardEngine[Catalina].StandardHost[localhost].StandardContext[]

jar包没有正确导入

1、在 build path 中添加

2、如果这里不添加在编译的时你的jar包将不会被导入

3、如果依然没有成功请删除user jar包重新导入

以上这篇java读取html文件,并获取body中所有的标签及内容的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java使用EasyExcel实现合并单元格

    java使用EasyExcel实现合并单元格

    这篇文章主要为大家详细介绍了java使用EasyExcel实现合并单元格的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • Java利用EasyExcel实现合并单元格

    Java利用EasyExcel实现合并单元格

    在某些业务场景中可能会有合并单元格的需求,本文将详细为大家讲解Java如何利用EasyExcel实现合并单元格,感兴趣的小伙伴可以了解一下
    2022-06-06
  • 聊聊Kotlin 中 lateinit 和 lazy 的原理区别

    聊聊Kotlin 中 lateinit 和 lazy 的原理区别

    使用 Kotlin 进行开发,对于 latelinit 和 lazy 肯定不陌生。但其原理上的区别,可能鲜少了解过,借着本篇文章普及下这方面的知识,感兴趣的朋友一起看看吧
    2022-07-07
  • 深入浅析Java中的final关键字

    深入浅析Java中的final关键字

    在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量),下面通过本篇文章给大家介绍java中的final关键字,对java fina关键字相关知识感兴趣的朋友一起看看吧
    2015-12-12
  • SpringBoot项目整合Log4j2实现自定义日志打印失效问题解决

    SpringBoot项目整合Log4j2实现自定义日志打印失效问题解决

    这篇文章主要介绍了SpringBoot项目整合Log4j2实现自定义日志打印失效问题解决,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • 仿钉钉流程轻松实现JSON转BPMN完整实现过程示例

    仿钉钉流程轻松实现JSON转BPMN完整实现过程示例

    这篇文章主要为大家介绍了仿钉钉流程轻松实现JSON转BPMN完整实现过程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Java 中 Date 与 Calendar 之间的编辑与转换实例详解

    Java 中 Date 与 Calendar 之间的编辑与转换实例详解

    这篇文章主要介绍了Java 中 Date 与 Calendar 之间的编辑与转换 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07
  • 解决SpringBoot启动过后不能访问jsp页面的问题(超详细)

    解决SpringBoot启动过后不能访问jsp页面的问题(超详细)

    这篇文章主要介绍了解决SpringBoot启动过后不能访问jsp页面的问题,文中通过示例代码介绍的非常详细,有需要的朋友可以参考一下,希望对你有所帮助。
    2020-05-05
  • springboot实现rabbitmq的队列初始化和绑定

    springboot实现rabbitmq的队列初始化和绑定

    这篇文章主要介绍了springboot实现rabbitmq的队列初始化和绑定,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • JAVA多线程抢红包的实现示例

    JAVA多线程抢红包的实现示例

    这篇文章主要介绍了JAVA多线程抢红包的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论