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文件相关推荐

  1. java工具类获取文件扩展名与content-type、http与content-type映射关系

    java工具类获取文件扩展名与content-type.http与content-type映射关系 大家好,我是酷酷的韩~ 一.对应关系参考地址: http://doc.chacuo.net/cont ...

  2. IDEA Java解析GeoJson.json文件

    IDEA Java解析GeoJson.json文件 一.遇到的问题 1. 无法导入成功 2. org.geotools.StyleFactory is not an ImageIO SPI class ...

  3. Java gdal .mif/.mid文件读取

    上一篇研究了 Windows10 64位 Python读取.mif/.mid文件并转成txt 今天研究一下Java读取MIF. 俩种解决办法: (1)Python程序读取.mif/.mid转成txt, ...

  4. java中读取properties文件内容五种方式

    一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...

  5. java如何读写json文件

    java如何读写json文件 在实际项目开发中,有时会遇到一些全局的配置缓存,最好的做法是配置redis数据库作为数据缓存,而当未有配置redis服务器时,读取静态资源文件(如xml.json等)也是 ...

  6. java 打开服务器excel文件_Java中上传excel文件并在服务器端读取存入数据库

    传excel文件并在服务器端读取存入数据库 博客分类: struts2 Excel JSP XML 工作 Java代码 页面jsp文件 action处理:publicclassManyContacts ...

  7. java缓冲流 复制文件_java使用缓冲流复制文件的方法

    本文实例为大家分享了java使用缓冲流复制文件的具体代码,供大家参考,具体内容如下 [1] 程序设计 /*------------------------------- 1.缓冲流是一种处理流,用来加 ...

  8. Java中 实现通过文件夹选择任一图像,从而进行图像卷积操作

    ** Java中 实现通过文件夹选择任一图像,从而进行图像卷积操作 ** 之前的那篇关于图像卷积的博客(Java中实现图像的卷积效果),只是讲了给定一张图片,从而实现图片的卷积操作:而现在,需要去实现 ...

  9. java jar 是什么文件_jar文件怎么打开?jar文件是什么?

    系统迷今天继续给大家分享个科普知识吧.很多朋友不知道jar文件是什么,在这里,我就简单做下记录,方便后来需要的朋友查询了解.jar文件其实是Java项目下生成的项目文件,当然也有用户称之为Java压缩 ...

最新文章

  1. 【Linux实用技术】LFS6.3构建实录
  2. 风影ASP.NET基础教学 5 验证控件(二) 扩展自己的验证控件
  3. 虚拟机和主机ping不通,SQL Server无法远程连接的解决方法
  4. oracle Schema Object Dependencies
  5. python在画布上写文字大小_Tkinter:在画布上缩放项目
  6. 机器学习之支持向量机
  7. mysql limit 表的长度_mysql中的limit用法有哪些(推荐)
  8. 七月刚入职的阿里测试开发岗-高频知识整理,内附面试题答案
  9. java单一登录_java实现单一登录 踢人效果
  10. 英语影视台词---无敌破坏王2大脑互联网(3)((Ralph)我们去喝根汁汽水吧)...
  11. 为什么老司机开车都不快?
  12. lisp一键室内标注_LISP-标注的自动位置调整
  13. Bailian3713 外星人翻译用数字转换模块【递归+映射】
  14. linux命令安装中英文插件,linux – 如何使用命令行自动安装Eclipse插件?
  15. 区间比较_双色球82期历史同期比较!断一区间出现两期,其余期次皆未断一区...
  16. linux教程,linux视频教程,linux…
  17. 02java特性,编译与运行
  18. 软件需求分析模板2020-11-04
  19. 封装el-select(全球国家名字及国家区号),select 输入框回显
  20. excel表格如何转换成word表格_Word表格如何转为Excel表格?这2个小技巧轻松搞定!

热门文章

  1. 微信社群机器人Java,做社群一定需要用到微信群机器人吗?看这里你就懂了!...
  2. LoRaWAN模块在车辆跟踪定位中的应用
  3. 逆拉东变换(inverse Radontransform)【MATLAB函数】
  4. 环保建设和环保理念_环保网站设计展示
  5. P2P普及系列之一:拓扑结构与P2P zz
  6. 关于做爬虫项目的一些小杂记
  7. 盘点:那些改变了世界的代码
  8. 如何轻松拿到淘宝前端 offer | 掘金技术征文
  9. jstack实战死循环与死锁
  10. 【重量级】揭秘移动网络的性能(在)--移动网络组件具体解释