java html 转成mht_java工具类mht转html格式文件 及简单的HTML解析

这是一个Java工具类,用于将MHT文件转换为HTML格式,并使用Jsoup库进行HTML解析。它包括从HTML文件中提取特定标签值的方法,例如姓名和性别,以及解析教育经历。类中提供了Mht2HtmlUtil方法,如mht2html、findResultValue和findResultValueToArray,用于处理文件转换和内容提取。
摘要由CSDN通过智能技术生成

packagecom.szy.project.utils;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.BufferedReader;importjava.io.DataOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.io.Reader;importjava.io.Writer;importjava.util.Enumeration;importjavax.mail.MessagingException;importjavax.mail.Multipart;importjavax.mail.Session;importjavax.mail.internet.MimeBodyPart;importjavax.mail.internet.MimeMessage;importjavax.mail.internet.MimeMultipart;importorg.jsoup.Jsoup;importorg.jsoup.nodes.Document;/*** 转换工具 ---------- 需要引入第三方依赖 javaMail转换格式 和 jsoup解析HTML

* jsoup 文档地址 :http://www.open-open.com/jsoup/parse-document-from-string.htm* 将mht 转化成 HTML

*@author隔壁老王

**/

public classMht2HtmlUtil {public static void main(String[] args) throwsIOException {/*** 转换*/

//mht2html("f:\\job_111.mht", "f:\\test.htm");

/*** 获取姓名和性别*/String nameAndSex= Mht2HtmlUtil.findResultValue("f:\\test.htm", "li", "info_name");

String tmpString= nameAndSex.replaceAll("(?i)[^a-zA-Z0-9\u4E00-\u9FA5]", "");//去掉所有中英文符号

char[] carr =tmpString.toCharArray();for (int i = 0; i < tmpString.length(); i++) {if (carr[i] < 0xFF) {

carr[i]= ' ';//过滤掉非汉字内容

}

}

System.out.println(tmpString.substring(0, tmpString.length()-1)); //姓名

System.out.println(tmpString.substring(tmpString.length()-1)); //性别

/*** 获取教育经历*/File htmlf=new File("f:\\test.htm");

Document doc=Jsoup.parse(htmlf, "UTF-8");

String ss=doc.body().toString();//class等于masthead的li标签

Object[] aa= doc.select("div.detaile_box").toArray();for (int i = 0; i < aa.length; i++) {if(i==3){

String strtext=aa[i].toString();

Document docs=Jsoup.parse(strtext);

Object[] bb= docs.select("b.edu_main_sch").toArray();for (int j = 0; j < bb.length; j++) {

String tt=bb[j].toString();

Document doct=Jsoup.parse(tt);

String result= doct.select("b.edu_main_sch").text();

String a=result.substring(0, result.indexOf("|")).trim();

String b=result.substring(result.lastIndexOf("|")+1, result.length()).trim();

System.out.println(a+" "+b); //毕业院校加学历

}

}

}

}/*** 解析标签 获取标签值

*@paramhtmlFilePath 文件路径

*@paramlableName 标签名称

*@paramonClassName 标签名称

*@return*@throwsIOException*/

public static String findResultValue(String htmlFilePath , String lableName , String onClassName) throwsIOException{

File htmlf=newFile(htmlFilePath);

Document doc=Jsoup.parse(htmlf, "UTF-8");

String bodyText=doc.body().toString(); //获取文件文本信息//class等于onClassName的lableName标签

String resultValue = doc.select(lableName+"."+onClassName).first().text();returnresultValue;

}/*** 解析标签结果返回多个值

*@paramhtmlFilePath 文件路径

*@paramlableName 标签名称

*@paramonClassName 标签名称

*@return*@throwsIOException*/

public static Object[] findResultValueToArray (String htmlFilePath , String lableName , String onClassName) throwsIOException{

File htmlf=newFile(htmlFilePath);

Document doc=Jsoup.parse(htmlf, "UTF-8");

String bodyText=doc.body().toString(); //获取文件文本信息

return doc.select(lableName+"."+onClassName).toArray();

}/*** 将 mht文件转换成 html文件

*

*@params_SrcMht // mht 文件的位置

*@params_DescHtml // 转换后输出的HTML的位置*/

public static voidmht2html(String srcMht, String descHtml) {try{

InputStream fis= newFileInputStream(srcMht);

Session mailSession=Session.getDefaultInstance(

System.getProperties(),null);

MimeMessage msg= newMimeMessage(mailSession, fis);

Object content=msg.getContent();if (content instanceofMultipart) {

MimeMultipart mp=(MimeMultipart) content;

MimeBodyPart bp1= (MimeBodyPart) mp.getBodyPart(0);//获取mht文件内容代码的编码

String strEncodng =getEncoding(bp1);//获取mht文件的内容

String strText =getHtmlText(bp1, strEncodng);if (strText == null)return;/*** 创建以mht文件名称的文件夹,主要用来保存资源文件。 这里不需要所以注释掉了*/

/*File parent = null;

if (mp.getCount() > 1) {

parent = new File(new File(descHtml).getAbsolutePath()

+ ".files");

parent.mkdirs();

if (!parent.exists()) { // 创建文件夹失败的话则退出

return;

}

}*/

/*** FOR中代码 主要是保存资源文件及替换路径 这里不需要所以注释掉了*/

/*for (int i = 1; i < mp.getCount(); ++i) {

MimeBodyPart bp = (MimeBodyPart) mp.getBodyPart(i);

// 获取资源文件的路径

// 例(获取:http://xxx.com/abc.jpg)

String strUrl = getResourcesUrl(bp);

if (strUrl == null || strUrl.length() == 0)

continue;

DataHandler dataHandler = bp.getDataHandler();

MimePartDataSource source = (MimePartDataSource) dataHandler

.getDataSource();

// 获取资源文件的绝对路径

String FilePath = parent.getAbsolutePath() + File.separator

+ getName(strUrl, i);

File resources = new File(FilePath);

// 保存资源文件

if (SaveResourcesFile(resources, bp.getInputStream())) {

// 将远程地址替换为本地地址 如图片、JS、CSS样式等等

strText = strText.replace(strUrl,

resources.getAbsolutePath());

}

}*/

//最后保存HTML文件

SaveHtml(strText, descHtml, strEncodng);

}

}catch(Exception e) {

e.printStackTrace();

}

}/*** 获取mht文件内容中资源文件的名称

*

*@paramstrName

*@paramID

*@return

*/

public static String getName(String strName, intID) {char separator1 = '/';char separator2 = '\\';//将换行替换

strName = strName.replaceAll("\r\n", "");//获取文件名称

if (strName.lastIndexOf(separator1) >= 0) {return strName.substring(strName.lastIndexOf(separator1) + 1);

}if (strName.lastIndexOf(separator2) >= 0) {return strName.substring(strName.lastIndexOf(separator2) + 1);

}return "";

}/*** 将提取出来的html内容写入保存的路径中。

*

*@paramstrText

*@paramstrHtml

*@paramstrEncodng*/

public static booleanSaveHtml(String s_HtmlTxt, String s_HtmlPath,

String s_Encode) {try{

Writer out= null;

out= newOutputStreamWriter(new FileOutputStream(s_HtmlPath, false), s_Encode);

out.write(s_HtmlTxt);

out.close();

}catch(Exception e) {return false;

}return true;

}/*** 保存网页中的JS、图片、CSS样式等资源文件

*

*@paramSrcFile

* 源文件

*@paraminputStream

* 输入流

*@return

*/

private static booleanSaveResourcesFile(File SrcFile,

InputStream inputStream) {if (SrcFile == null || inputStream == null) {return false;

}

BufferedInputStream in= null;

FileOutputStream fio= null;

BufferedOutputStream osw= null;try{

in= newBufferedInputStream(inputStream);

fio= newFileOutputStream(SrcFile);

osw= new BufferedOutputStream(newDataOutputStream(fio));int index = 0;byte[] a = new byte[1024];while ((index = in.read(a)) != -1) {

osw.write(a,0, index);

}

osw.flush();return true;

}catch(Exception e) {

e.printStackTrace();return false;

}finally{try{if (osw != null)

osw.close();if (fio != null)

fio.close();if (in != null)

in.close();if (inputStream != null)

inputStream.close();

}catch(Exception e) {

e.printStackTrace();return false;

}

}

}/*** 获取mht文件里资源文件的URL路径

*

*@parambp

*@return

*/

private staticString getResourcesUrl(MimeBodyPart bp) {if (bp == null) {return null;

}try{

Enumeration list=bp.getAllHeaders();while(list.hasMoreElements()) {

javax.mail.Header head=(javax.mail.Header) list.nextElement();if (head.getName().compareTo("Content-Location") == 0) {returnhead.getValue();

}

}return null;

}catch(MessagingException e) {return null;

}

}/*** 获取mht文件中的内容代码

*

*@parambp

*@paramstrEncoding

* 该mht文件的编码

*@return

*/

private staticString getHtmlText(MimeBodyPart bp, String strEncoding) {

InputStream textStream= null;

BufferedInputStream buff= null;

BufferedReader br= null;

Reader r= null;try{

textStream=bp.getInputStream();

buff= newBufferedInputStream(textStream);

r= newInputStreamReader(buff, strEncoding);

br= newBufferedReader(r);

StringBuffer strHtml= new StringBuffer("");

String strLine= null;while ((strLine = br.readLine()) != null) {

System.out.println(strLine);

strHtml.append(strLine+ "\r\n");

}

br.close();

r.close();

textStream.close();returnstrHtml.toString();

}catch(Exception e) {

e.printStackTrace();

}finally{try{if (br != null)

br.close();if (buff != null)

buff.close();if (textStream != null)

textStream.close();

}catch(Exception e) {

}

}return null;

}/*** 获取mht网页文件中内容代码的编码

*

*@parambp

*@return

*/

private staticString getEncoding(MimeBodyPart bp) {if (bp == null) {return null;

}try{

Enumeration list=bp.getAllHeaders();while(list.hasMoreElements()) {

javax.mail.Header head=(javax.mail.Header) list.nextElement();if (head.getName().equalsIgnoreCase("Content-Type")) {

String strType=head.getValue();int pos = strType.indexOf("charset=");if (pos >= 0) {

String strEncoding= strType.substring(pos + 8,

strType.length());if (strEncoding.startsWith("\"")|| strEncoding.startsWith("\'")) {

strEncoding= strEncoding.substring(1,

strEncoding.length());

}if (strEncoding.endsWith("\"")|| strEncoding.endsWith("\'")) {

strEncoding= strEncoding.substring(0,

strEncoding.length()- 1);

}if (strEncoding.toLowerCase().compareTo("gb2312") == 0) {

strEncoding= "gbk";

}returnstrEncoding;

}

}

}

}catch(MessagingException e) {

e.printStackTrace();

}return null;

}/*** 删除指定文件

*@paramfilePath 文件路径

*@paramfileName 文件名称

*@paramlayout 文件格式*/

public static voiddeleteFileName(String filePath , String fileName , String layout){

File folder= newFile(filePath);

String fileNameOnLayout=fileName+"."+layout;

File[] files= folder.listFiles(); //获取该文件夹下的所有文件

for(File file:files){if(file.getName().equals(fileNameOnLayout)){

file.delete();

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值