java mht转html文件
mht文件转换成 html文件
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.Enumeration;
import javax.activation.DataHandler;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimePartDataSource; public class HtmlApplication{
public static void main(String[] args){ HtmlApplication.mht2html("D:\\xx.mht", "D:\\xx.html");} /** * 将 mht文件转换成 html文件 * @param s_SrcMht * @param s_DescHtml */
public static void mht2html(String s_SrcMht, String s_DescHtml) { try { InputStream fis = new FileInputStream(s_SrcMht); Session mailSession = Session.getDefaultInstance(System.getProperties(), null); MimeMessage msg = new MimeMessage(mailSession, fis); Object content = msg.getContent(); if (content instanceof Multipart){ 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(s_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, s_DescHtml, strEncodng); } } catch (Exception e) { e.printStackTrace(); }
} /** * 获取mht文件内容中资源文件的名称 * @param strName * @param ID * @return */
public static String getName(String strName, int ID) { 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内容写入保存的路径中。 * @param strText * @param strHtml * @param strEncodng */
public static boolean SaveHtml(String s_HtmlTxt, String s_HtmlPath , String s_Encode) { try{ Writer out = null; out = new OutputStreamWriter(new FileOutputStream(s_HtmlPath, false), s_Encode); out.write(s_HtmlTxt); out.close(); }catch(Exception e){ return false; } return true;
} /** * 保存网页中的JS、图片、CSS样式等资源文件 * @param SrcFile 源文件 * @param inputStream 输入流 * @return */
private static boolean SaveResourcesFile(File SrcFile, InputStream inputStream) { if (SrcFile == null || inputStream == null) { return false; } BufferedInputStream in = null; FileOutputStream fio = null; BufferedOutputStream osw = null; try { in = new BufferedInputStream(inputStream); fio = new FileOutputStream(SrcFile); osw = new BufferedOutputStream(new DataOutputStream(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路径 * @param bp * @return */
private static String 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) { return head.getValue(); } } return null; } catch (MessagingException e) { return null; }
} /** * 获取mht文件中的内容代码 * @param bp * @param strEncoding 该mht文件的编码 * @return */
private static String getHtmlText(MimeBodyPart bp, String strEncoding) { InputStream textStream = null; BufferedInputStream buff = null; BufferedReader br = null; Reader r = null; try { textStream = bp.getInputStream(); buff = new BufferedInputStream(textStream); r = new InputStreamReader(buff, strEncoding); br = new BufferedReader(r); StringBuffer strHtml = new StringBuffer(""); String strLine = null; while ((strLine = br.readLine()) != null) { strHtml.append(strLine + "\r\n"); } br.close(); r.close(); textStream.close(); return strHtml.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网页文件中内容代码的编码 * @param bp * @return */
private static String 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().compareTo("Content-Type") == 0) { 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"; } return strEncoding; } } } } catch (MessagingException e) { e.printStackTrace(); } return null;
}
}
java mht转html文件相关推荐
- java工具类获取文件扩展名与content-type、http与content-type映射关系
java工具类获取文件扩展名与content-type.http与content-type映射关系 大家好,我是酷酷的韩~ 一.对应关系参考地址: http://doc.chacuo.net/cont ...
- IDEA Java解析GeoJson.json文件
IDEA Java解析GeoJson.json文件 一.遇到的问题 1. 无法导入成功 2. org.geotools.StyleFactory is not an ImageIO SPI class ...
- Java gdal .mif/.mid文件读取
上一篇研究了 Windows10 64位 Python读取.mif/.mid文件并转成txt 今天研究一下Java读取MIF. 俩种解决办法: (1)Python程序读取.mif/.mid转成txt, ...
- java中读取properties文件内容五种方式
一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...
- java如何读写json文件
java如何读写json文件 在实际项目开发中,有时会遇到一些全局的配置缓存,最好的做法是配置redis数据库作为数据缓存,而当未有配置redis服务器时,读取静态资源文件(如xml.json等)也是 ...
- java 打开服务器excel文件_Java中上传excel文件并在服务器端读取存入数据库
传excel文件并在服务器端读取存入数据库 博客分类: struts2 Excel JSP XML 工作 Java代码 页面jsp文件 action处理:publicclassManyContacts ...
- java缓冲流 复制文件_java使用缓冲流复制文件的方法
本文实例为大家分享了java使用缓冲流复制文件的具体代码,供大家参考,具体内容如下 [1] 程序设计 /*------------------------------- 1.缓冲流是一种处理流,用来加 ...
- Java中 实现通过文件夹选择任一图像,从而进行图像卷积操作
** Java中 实现通过文件夹选择任一图像,从而进行图像卷积操作 ** 之前的那篇关于图像卷积的博客(Java中实现图像的卷积效果),只是讲了给定一张图片,从而实现图片的卷积操作:而现在,需要去实现 ...
- java jar 是什么文件_jar文件怎么打开?jar文件是什么?
系统迷今天继续给大家分享个科普知识吧.很多朋友不知道jar文件是什么,在这里,我就简单做下记录,方便后来需要的朋友查询了解.jar文件其实是Java项目下生成的项目文件,当然也有用户称之为Java压缩 ...
最新文章
- 【Linux实用技术】LFS6.3构建实录
- 风影ASP.NET基础教学 5 验证控件(二) 扩展自己的验证控件
- 虚拟机和主机ping不通,SQL Server无法远程连接的解决方法
- oracle Schema Object Dependencies
- python在画布上写文字大小_Tkinter:在画布上缩放项目
- 机器学习之支持向量机
- mysql limit 表的长度_mysql中的limit用法有哪些(推荐)
- 七月刚入职的阿里测试开发岗-高频知识整理,内附面试题答案
- java单一登录_java实现单一登录 踢人效果
- 英语影视台词---无敌破坏王2大脑互联网(3)((Ralph)我们去喝根汁汽水吧)...
- 为什么老司机开车都不快?
- lisp一键室内标注_LISP-标注的自动位置调整
- Bailian3713 外星人翻译用数字转换模块【递归+映射】
- linux命令安装中英文插件,linux – 如何使用命令行自动安装Eclipse插件?
- 区间比较_双色球82期历史同期比较!断一区间出现两期,其余期次皆未断一区...
- linux教程,linux视频教程,linux…
- 02java特性,编译与运行
- 软件需求分析模板2020-11-04
- 封装el-select(全球国家名字及国家区号),select 输入框回显
- excel表格如何转换成word表格_Word表格如何转为Excel表格?这2个小技巧轻松搞定!