网上搜索获得mht文件转html,稍作了修改,即可使用,在此做个笔记。

public class Mht2HtmlUtil {

public static void main(String[] args) {

Mht2HtmlUtil.mht2html("d:\\51job_111.mht", "d:\\test.htm");

}

/**

* 将 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) {

System.out.println(strLine);

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().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";

}

return strEncoding;

}

}

}

} catch (MessagingException e) {

e.printStackTrace();

}

return null;

}

}

mht转html保留图片,【JAVA】mht文件转html相关推荐

  1. java mht 转换 html_Word单网页mht文件,汉字被html转义解决办法

    做项目要生成Word文档时,一般都是先用Word把里面的内容写好,然后另存为mht文件,得到一个网页文件,这样程序就可以自动替换网页中得文件,然后让大家下载. 下载这里就不说了,很简单,如下处理一下就 ...

  2. java中文件处理之图片_在Java 7中处理文件

    java中文件处理之图片 以下是The Well-Grounded Java Developer的草稿的修改后的片段. 它使您快速了解与以前版本相比,在Java 7中操作文件要容易得多. 通过使用新的 ...

  3. java点击图片发出声音_Java 中图片和声音文件的加载

    /* * 本程序实现以下效果: * 1.界面显示一个按钮,按钮初始为红色. * 2.将鼠标移到按钮上时,按钮呈蓝色. * 3.点击鼠标,有声音效果. * 4.鼠标离开按钮时,按钮恢复成红色. */ i ...

  4. java图片转换pdf_Java实现图片转换PDF文件的示例代码

    最近因为一些事情,需要将一张简单的图片转换为PDF的文件格式,在网上找了一些工具,但是这些工具不是需要注册账号,就是需要下载软件. 而对于只是转换一张图片的情况下,这些操作显然是非常繁琐的,所以作者就 ...

  5. java中文件处理之图片_Java中的文件处理

    java中文件处理之图片 File Handing in java comes under IO operations. Java IO package java.io classes are spe ...

  6. 通过Java批量导出带有图片的Excel文件数据

    批量导出带有图片的Excel文件 一.思路解析 二.关键源码 三.总结 Java通过POI或者一些常见的Excel工具类能够轻易导出后台的结构化数据,但是最近面临一个新需求,需要将对应记录数据和图片网 ...

  7. java判断文件夹中的图片是否重复

    java判断文件夹中的图片是否重复 直接上代码 package com.example.common; import java.io.File; import java.io.FileInputStr ...

  8. 记录一下 Java 代码实现文件夹、文件的对比,主要包含 word、pdf、文本、图片等相关文件的对比计算,以及计算文本的相似率(重复率)、筛选出差异的文件、方便文件和文档的去重,并封装为jar包

    记录一下 Java 代码实现文件夹.文件的对比,主要包含 word.pdf.文本.图片等相关文件的对比计算,以及计算文本的相似率(重复率).筛选出差异的文件.方便文件和文档的去重,并把所有的源码封装为 ...

  9. java POI 插入图片到Excel文件

    1.添加POI依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</a ...

  10. Java实现图片转换PDF文件

    文章目录 引入依赖 前端页面 控制层接口 PDF工具类 页面效果 最近因为一些事情,需要将一张简单的图片转换为PDF的文件格式,在网上找了一些工具,但是这些工具不是需要注册账号,就是需要下载软件. 而 ...

最新文章

  1. GROMACS运行参数整理(二)
  2. 15-CoreData删除所有数据之NSBatchDeleteRequest
  3. 程序员怎样才能写出一篇好的技术文章
  4. Windows系统程序设计之结构化异常处理
  5. java代码实现链表_java单链表代码实现
  6. 有些文档,本来想整理整理贴出来,
  7. 多角度分析,通讯时序数据的预测与异常检测挑战
  8. java 调用foxmail_Javamail简单使用案例
  9. 招聘ASP.net高级Web开发工程师
  10. python怎么读程序-python怎么读sql数据?
  11. 管理感悟:如何改造代码
  12. 考研日语线上笔记(一):考研日语203大纲陌生、易混词汇本
  13. JVM内存模型和性能调优:JVM整体结构及内存模型- 第10篇
  14. 红米3s进不了recovery_红米 3S中文Recovery刷机教程
  15. 如何用电脑下载微信视频号中的视频?
  16. TestCenter测试管理工具功能详解十四(S)
  17. Tech Talk 宣传 | 如何高效、极简构造无服务器 Web 应用
  18. Word中的拼页、书籍折页、反向书籍折页(二)
  19. 【移动通信】信号质量评估RSRP和SINR
  20. Java学习路线,java学习教程(入门到精通)

热门文章

  1. Java去除中英文标点符号
  2. 卖身百度,是知乎最好的结局?
  3. 机器人挠人脚心_美国惊现“挠脚狂魔” 潜入宿舍挠人脚心
  4. html5 css 插入视频,HTML+CSS入门 HTML网页中插入视频各种方法
  5. 中国研发经费投入逼近2万亿,保持两位数增速,企业成为主要力量
  6. pycharm 安装pip 详细步骤
  7. Learning optical flow from still images
  8. vijos-伊甸园日历游戏
  9. 方差递推公式_常见递推公式(数学)
  10. [ZT]智能客户端(Smart Client)