最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java讀取html文件,并獲取body中所有的標(biāo)簽及內(nèi)容的案例

 更新時(shí)間:2020年08月19日 11:05:48   作者:磨人小妖精  
這篇文章主要介紹了java讀取html文件,并獲取body中所有的標(biāo)簽及內(nèi)容的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

這里的獲取的是html文件中body中的所有標(biāo)簽以及內(nèi)容

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 {
          // 如果存在圖片,則將相對(duì)路徑轉(zhuǎn)換為絕對(duì)路徑
          String lowerCaseLine = line.toLowerCase();
          if (lowerCaseLine.contains("src")) {
            
            //這里是定義圖片的訪問路徑
            String directory = "D:/test";
            // 如果路徑名不以反斜杠結(jié)尾,則手動(dòng)添加反斜杠
            /*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());
          */
            // 如果該行存在多個(gè)<img>元素,則分行進(jìn)行替代
            String[] splitLines = line.split("<img\\s+"); // <img后帶一個(gè)或多個(gè)空格
            // 因?yàn)閖ava中引用的問題不能使用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);
              }
            }
            
            // 最后進(jìn)行拼接
            line = "";
            for (int i = 0; i < splitLines.length - 1; i++) { // 循環(huán)次數(shù)要-1,因?yàn)樽詈笠粋€(gè)字符串后不需要添加<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 = '\"'; // 默認(rèn)為雙引號(hào),但也有可能為單引號(hào)
      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];
    }
  }
  
}

補(bǔ)充知識(shí):StandardEngine[Catalina].StandardHost[localhost].StandardContext[]

jar包沒有正確導(dǎo)入

1、在 build path 中添加

2、如果這里不添加在編譯的時(shí)你的jar包將不會(huì)被導(dǎo)入

3、如果依然沒有成功請(qǐng)刪除user jar包重新導(dǎo)入

以上這篇java讀取html文件,并獲取body中所有的標(biāo)簽及內(nèi)容的案例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • win10設(shè)置java環(huán)境變量的方法

    win10設(shè)置java環(huán)境變量的方法

    下面小編就為大家?guī)硪黄獁in10設(shè)置java環(huán)境變量的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • MyBatis通過JDBC數(shù)據(jù)驅(qū)動(dòng)生成的執(zhí)行語(yǔ)句問題

    MyBatis通過JDBC數(shù)據(jù)驅(qū)動(dòng)生成的執(zhí)行語(yǔ)句問題

    這篇文章主要介紹了MyBatis通過JDBC數(shù)據(jù)驅(qū)動(dòng)生成的執(zhí)行語(yǔ)句問題的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • JAVA字符串拼接常見方法匯總

    JAVA字符串拼接常見方法匯總

    這篇文章主要介紹了JAVA字符串拼接常見方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • SpringBoot2零基礎(chǔ)到精通之自動(dòng)配置底層分析及小技巧

    SpringBoot2零基礎(chǔ)到精通之自動(dòng)配置底層分析及小技巧

    SpringBoot是一種整合Spring技術(shù)棧的方式(或者說是框架),同時(shí)也是簡(jiǎn)化Spring的一種快速開發(fā)的腳手架,本篇讓我們一起學(xué)習(xí)自動(dòng)配置的底層分析與一些開發(fā)中的小技巧
    2022-03-03
  • 基于編譯虛擬機(jī)jvm—openjdk的編譯詳解

    基于編譯虛擬機(jī)jvm—openjdk的編譯詳解

    下面小編就為大家分享一篇基于編譯虛擬機(jī)jvm—openjdk的編譯詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2017-12-12
  • Springboot如何通過filter修改Header的值

    Springboot如何通過filter修改Header的值

    這篇文章主要介紹了Springboot如何通過filter修改Header的值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java?List集合去除null的4種方法

    java?List集合去除null的4種方法

    這篇文章主要給大家介紹了java?List集合去除null的3種方法,文中通過代碼示例將每種方法都介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • java基于jdbc實(shí)現(xiàn)簡(jiǎn)單學(xué)生管理系統(tǒng)

    java基于jdbc實(shí)現(xiàn)簡(jiǎn)單學(xué)生管理系統(tǒng)

    本文主要主要介紹了java連接mysql數(shù)據(jù)庫(kù)的一個(gè)簡(jiǎn)單學(xué)生系統(tǒng),通過jdbc連接數(shù)據(jù)庫(kù)。文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • SpringBoot集成Neo4j的詳細(xì)教程

    SpringBoot集成Neo4j的詳細(xì)教程

    Spring Boot 提供了對(duì) Neo4j 的良好支持,使得開發(fā)者可以更方便地使用圖數(shù)據(jù)庫(kù),通過使用 Spring Data Neo4j,開發(fā)者可以輕松地進(jìn)行數(shù)據(jù)訪問、操作以及管理,本文將詳細(xì)介紹如何在 Spring Boot 應(yīng)用中集成 Neo4j,需要的朋友可以參考下
    2024-11-11
  • Java常見的阻塞隊(duì)列總結(jié)

    Java常見的阻塞隊(duì)列總結(jié)

    今天我們來討論另外一類容器:阻塞隊(duì)列,文中有非常詳細(xì)的代碼示例及介紹,對(duì)正在學(xué)習(xí)JAVA的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06

最新評(píng)論

大连市| 泊头市| 凤凰县| 和静县| 秀山| 颍上县| 东乌珠穆沁旗| 龙井市| 湘潭县| 奉贤区| 林西县| 合江县| 望都县| 饶平县| 陆丰市| 张家界市| 都匀市| 大关县| 济宁市| 灵石县| 萨嘎县| 晋宁县| 洪雅县| 大理市| 株洲市| 雷波县| 黑山县| 会东县| 简阳市| 沐川县| 信宜市| 金寨县| 凉城县| 刚察县| 鹤峰县| 和林格尔县| 吴川市| 沾化县| 固原市| 布尔津县| 屏东县|