java讀取html文件,并獲取body中所有的標(biāo)簽及內(nèi)容的案例
這里的獲取的是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 {
// 如果存在圖片,則將相對路徑轉(zhuǎn)換為絕對路徑
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)為雙引號,但也有可能為單引號
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ǔ)充知識:StandardEngine[Catalina].StandardHost[localhost].StandardContext[]
jar包沒有正確導(dǎo)入
1、在 build path 中添加

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

3、如果依然沒有成功請刪除user jar包重新導(dǎo)入
以上這篇java讀取html文件,并獲取body中所有的標(biāo)簽及內(nèi)容的案例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Javadoc標(biāo)簽和Javadoc注釋規(guī)范說明
- Java 重命名 Excel 工作表并設(shè)置工作表標(biāo)簽顏色的示例代碼
- Java利用正則取標(biāo)簽之間的數(shù)據(jù)
- Java Swing JLabel標(biāo)簽的使用方法
- Java的“Goto”與標(biāo)簽及使用詳解
- java過濾html標(biāo)簽獲取純文本信息的實(shí)例
- git標(biāo)簽管理_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- JAVA過濾標(biāo)簽實(shí)現(xiàn)將html內(nèi)容轉(zhuǎn)換為文本的方法示例
- Java使用正則表達(dá)式刪除所有HTML標(biāo)簽的方法示例
- Java基礎(chǔ)學(xué)習(xí)之標(biāo)簽
相關(guān)文章
MyBatis通過JDBC數(shù)據(jù)驅(qū)動(dòng)生成的執(zhí)行語句問題
這篇文章主要介紹了MyBatis通過JDBC數(shù)據(jù)驅(qū)動(dòng)生成的執(zhí)行語句問題的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08
SpringBoot2零基礎(chǔ)到精通之自動(dòng)配置底層分析及小技巧
SpringBoot是一種整合Spring技術(shù)棧的方式(或者說是框架),同時(shí)也是簡化Spring的一種快速開發(fā)的腳手架,本篇讓我們一起學(xué)習(xí)自動(dòng)配置的底層分析與一些開發(fā)中的小技巧2022-03-03
Springboot如何通過filter修改Header的值
這篇文章主要介紹了Springboot如何通過filter修改Header的值問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
java基于jdbc實(shí)現(xiàn)簡單學(xué)生管理系統(tǒng)
本文主要主要介紹了java連接mysql數(shù)據(jù)庫的一個(gè)簡單學(xué)生系統(tǒng),通過jdbc連接數(shù)據(jù)庫。文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10

