java怎样读取html文件

如题所述

       java读取html文件跟读取普通文件一样,都是使用输入输出流,但是java读取html文件之后还需要解析,使用Jsoup对html进行解析。下面是一个java读取带表格的任意html文件,并把html文件转换成excel的例子。

    要求: 要求能够实现给出任意带table表格的html文件,生成与表格相同内容的excel文件,附件可以作为测试文件,提供给定的roster.html文件,通过java代码,实现生成与html页面的table相同样式的roster.xls文件。

  首先看roster.html:

java代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class HTMLTOExcel {
public static void main(String args[]) throws IOException{
///读取classpath目录下面的路径
String path=HTMLTOExcel.class.getResource("/").getPath();
path+="roster.html";
toExcel(path,"roster");      
    }
    //得到Document并且设置编码格式
public static Document getDoc(String fileName) throws IOException{
      File myFile=new File(fileName);
      Document doc= Jsoup.parse(myFile, "GBK","");
      return doc;
}
///这个方法用于根据trs行数和sheet画出整个表格
public static void mergeColRow(Elements trs,WritableSheet sheet) throws RowsExceededException, WriteException{
int[][] rowhb=new int[300][50];
for(int i=0;i<trs.size();i++){
 Element tr=trs.get(i);
 Elements tds=tr.getElementsByTag("td");
 
 int realColNum=0;
 for(int j=0;j<tds.size();j++){
  Element td=tds.get(j);  
  if(rowhb[i][realColNum]!=0){
  realColNum=getRealColNum(rowhb,i,realColNum);
  }
  int rowspan=1;
  int colspan=1;
  if(td.attr("rowspan")!=""){
  rowspan = Integer.parseInt(td.attr("rowspan"));
  }
  if(td.attr("colspan")!=""){
  colspan = Integer.parseInt(td.attr("colspan"));
  }
  String text=td.text();
  drawMegerCell(rowspan,colspan,sheet,realColNum,i,text,rowhb);
  realColNum=realColNum+colspan;
 }
 
}
}
///这个方法用于根据样式画出单元格,并且根据rowpan和colspan合并单元格
public static void drawMegerCell(int rowspan,int colspan,WritableSheet sheet,int realColNum,int realRowNum,String text,int[][] rowhb) throws RowsExceededException, WriteException{
  for(int i=0;i<rowspan;i++){
  for(int j=0;j<colspan;j++){
  if(i!=0||j!=0){
 text="";
  }
  Label label = new Label(realColNum+j,realRowNum+i,text);
   WritableFont countents = new WritableFont(WritableFont.TIMES,10); // 设置单元格内容,字号12  
   WritableCellFormat cellf = new WritableCellFormat(countents ); 
   cellf.setAlignment(jxl.format.Alignment.CENTRE);//把水平对齐方式指定为居中
   cellf.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);//把垂直对齐方式指定为居
   label.setCellFormat(cellf);
   sheet.addCell(label);
   rowhb[realRowNum+i][realColNum+j]=1;
  }
  }
  sheet.mergeCells(realColNum,realRowNum, realColNum+colspan-1,realRowNum+rowspan-1);
}
public static int getRealColNum(int[][] rowhb,int i,int realColNum){
while(rowhb[i][realColNum]!=0){
realColNum++;
}
return realColNum;
}
///根据colgroups设置表格的列宽
public static void setColWidth(Elements colgroups,WritableSheet sheet){
 if(colgroups.size()>0){
 Element colgroup=colgroups.get(0);
 Elements cols=colgroup.getElementsByTag("col");
 for(int i=0;i<cols.size();i++){
 Element col=cols.get(i);
 String strwd=col.attr("width");
 if(col.attr("width")!=""){
 int wd=Integer.parseInt(strwd);
 sheet.setColumnView(i,wd/8);
 }
 
 }
 
 }
}
//toExcel是根据html文件地址生成对应的xls
public static void toExcel(String fileName,String excelName)throws IOException{
Document doc=getDoc(fileName);
    String title = doc.title();
    ///得到样式,以后可以根据正则表达式解析css,暂且没有找到cssparse
    Elements style= doc.getElementsByTag("style");
    ///得到Table,demo只演示输入一个table,以后可以用循环遍历tables集合输入所有table
    Elements tables= doc.getElementsByTag("TABLE");    
    if(tables.size()==0){
    return;
    }
    Element table=tables.get(0);
   //得到所有行
    Elements trs = table.getElementsByTag("tr");
    ///得到列宽集合
    Elements colgroups=table.getElementsByTag("colgroup");
    
   try {
   //文件保存到classpath目录下面
    String path=HTMLTOExcel.class.getResource("/").getPath();
path+=excelName+".xls";
 System.out.println(path);
    WritableWorkbook book = Workbook.createWorkbook(new File(path));    
    WritableSheet sheet = book.createSheet("人事关系", 0);  
    setColWidth(colgroups,sheet);
    mergeColRow(trs,sheet);    
    book.write();    
    book.close();    
   } catch (RowsExceededException e) {
        e.printStackTrace();
   } catch (WriteException e) { 
        e.printStackTrace();
   }
}
}

解析html文件的例子文档地址:http://blog.csdn.net/androidwuyou/article/details/52636821

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-08-30
java读取html文件三项内容:
1、和普通的文件一样的读取方式即可解决;
2、例如放在项目的根目录下,在代码中就可以直接调用即可,无需加其他前缀路径;
3、例如放在web目录中的对应目录中,那么就可以照样访问,都不是问题。本回答被提问者采纳
第2个回答  2016-09-19

    java读取html文件和读取普通文件一样,用io读写操作就行

    要是读完需要解析html文件内容的话,可以使用jsoup,操作html的dom结构,跟jQuery语法类似。

第3个回答  2016-08-29
和读取xml文件一样吧
第4个回答  2016-08-29
使用Jsoup包可以读取编辑html文件,具体请自行百度吧。
相似回答