网上搜索获得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. Google Brain团队最新视频介绍
  2. Android SystemProperties设置/取得系统属性的用法总结
  3. Effective user and Real user
  4. Linux 下使用openSSL 生成RSA密钥对
  5. 使用ENTER模拟触发表单提交或者click事件
  6. linux mpc boot 串口初始化,uboot移植阶段二--3串口终结篇
  7. Eclipse 配置SSH 详解
  8. [翻译]Go与C#对比 第三篇:编译、运行时、类型系统、模块和其它的一切
  9. 消息中间件那些事--RabbitMQ
  10. 每一个都能笑抽,39个奇葩代码注释
  11. Linux获取执行文件路径,如何 获取linux进程的执行文件路径
  12. [C11] 推荐系统(Recommender Systems)
  13. win10专业版开机画面模糊_Win10系统登录背景变模糊的两种恢复方法
  14. 山西省吕梁市职称计算机考试,山西吕梁考点2012年职称计算机考试时间通知
  15. 如何使用Python实现一个pdf阅读器?
  16. 华东交通大学计算机全国排名,华东交通大学世界排名、中国排名、专业排名
  17. VS2017报错 class “Cxxxx“没有成员“GetContextMenuManager“ “GetContextMenuManager“:不是“Cxxxx“的成员
  18. 2018下半年计算机学科竞赛,2018年度下半年五大学科竞赛,其他赛事时间预告高一高二请收好,不要错过报名.doc...
  19. qt 不规则图形 消除锯齿
  20. python 压缩图片为指定大小

热门文章

  1. 什么软件可以让头发变黑_想让头发变黑、变好?可以试试这些方法
  2. python 局域网传文件_Python+pyftpdlib实现局域网文件互传代码示例
  3. vb中的print方法
  4. 机器学习和python学习之路精心整理技术书从入门到进阶
  5. 2022届软件技术专业毕业生就业岗位分析(.Net方向)
  6. Windows系统与Linux系统下的硬盘分区操作
  7. linux heartbeat rpm,linux之heartbeat高可用的简单配置
  8. 小白linux学习[1]__虚拟机NAT方式共享电信拨号上网
  9. 完美破解PS插件Parker
  10. python爬虫爬取中央气象台每日天气图