java讀取html文件,並獲取body中全部的標籤以及內容

這裏的獲取的是html文件中body中的全部標籤以及內容html

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];
        }
    }
    
}
相關文章
相關標籤/搜索