mht转html保留图片,【JAVA】mht文件转html
网上搜索获得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相关推荐
- java mht 转换 html_Word单网页mht文件,汉字被html转义解决办法
做项目要生成Word文档时,一般都是先用Word把里面的内容写好,然后另存为mht文件,得到一个网页文件,这样程序就可以自动替换网页中得文件,然后让大家下载. 下载这里就不说了,很简单,如下处理一下就 ...
- java中文件处理之图片_在Java 7中处理文件
java中文件处理之图片 以下是The Well-Grounded Java Developer的草稿的修改后的片段. 它使您快速了解与以前版本相比,在Java 7中操作文件要容易得多. 通过使用新的 ...
- java点击图片发出声音_Java 中图片和声音文件的加载
/* * 本程序实现以下效果: * 1.界面显示一个按钮,按钮初始为红色. * 2.将鼠标移到按钮上时,按钮呈蓝色. * 3.点击鼠标,有声音效果. * 4.鼠标离开按钮时,按钮恢复成红色. */ i ...
- java图片转换pdf_Java实现图片转换PDF文件的示例代码
最近因为一些事情,需要将一张简单的图片转换为PDF的文件格式,在网上找了一些工具,但是这些工具不是需要注册账号,就是需要下载软件. 而对于只是转换一张图片的情况下,这些操作显然是非常繁琐的,所以作者就 ...
- java中文件处理之图片_Java中的文件处理
java中文件处理之图片 File Handing in java comes under IO operations. Java IO package java.io classes are spe ...
- 通过Java批量导出带有图片的Excel文件数据
批量导出带有图片的Excel文件 一.思路解析 二.关键源码 三.总结 Java通过POI或者一些常见的Excel工具类能够轻易导出后台的结构化数据,但是最近面临一个新需求,需要将对应记录数据和图片网 ...
- java判断文件夹中的图片是否重复
java判断文件夹中的图片是否重复 直接上代码 package com.example.common; import java.io.File; import java.io.FileInputStr ...
- 记录一下 Java 代码实现文件夹、文件的对比,主要包含 word、pdf、文本、图片等相关文件的对比计算,以及计算文本的相似率(重复率)、筛选出差异的文件、方便文件和文档的去重,并封装为jar包
记录一下 Java 代码实现文件夹.文件的对比,主要包含 word.pdf.文本.图片等相关文件的对比计算,以及计算文本的相似率(重复率).筛选出差异的文件.方便文件和文档的去重,并把所有的源码封装为 ...
- java POI 插入图片到Excel文件
1.添加POI依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</a ...
- Java实现图片转换PDF文件
文章目录 引入依赖 前端页面 控制层接口 PDF工具类 页面效果 最近因为一些事情,需要将一张简单的图片转换为PDF的文件格式,在网上找了一些工具,但是这些工具不是需要注册账号,就是需要下载软件. 而 ...
最新文章
- Google Brain团队最新视频介绍
- Android SystemProperties设置/取得系统属性的用法总结
- Effective user and Real user
- Linux 下使用openSSL 生成RSA密钥对
- 使用ENTER模拟触发表单提交或者click事件
- linux mpc boot 串口初始化,uboot移植阶段二--3串口终结篇
- Eclipse 配置SSH 详解
- [翻译]Go与C#对比 第三篇:编译、运行时、类型系统、模块和其它的一切
- 消息中间件那些事--RabbitMQ
- 每一个都能笑抽,39个奇葩代码注释
- Linux获取执行文件路径,如何
获取linux进程的执行文件路径
- [C11] 推荐系统(Recommender Systems)
- win10专业版开机画面模糊_Win10系统登录背景变模糊的两种恢复方法
- 山西省吕梁市职称计算机考试,山西吕梁考点2012年职称计算机考试时间通知
- 如何使用Python实现一个pdf阅读器?
- 华东交通大学计算机全国排名,华东交通大学世界排名、中国排名、专业排名
- VS2017报错 class “Cxxxx“没有成员“GetContextMenuManager“ “GetContextMenuManager“:不是“Cxxxx“的成员
- 2018下半年计算机学科竞赛,2018年度下半年五大学科竞赛,其他赛事时间预告高一高二请收好,不要错过报名.doc...
- qt 不规则图形 消除锯齿
- python 压缩图片为指定大小
热门文章
- 什么软件可以让头发变黑_想让头发变黑、变好?可以试试这些方法
- python 局域网传文件_Python+pyftpdlib实现局域网文件互传代码示例
- vb中的print方法
- 机器学习和python学习之路精心整理技术书从入门到进阶
- 2022届软件技术专业毕业生就业岗位分析(.Net方向)
- Windows系统与Linux系统下的硬盘分区操作
- linux heartbeat rpm,linux之heartbeat高可用的简单配置
- 小白linux学习[1]__虚拟机NAT方式共享电信拨号上网
- 完美破解PS插件Parker
- python爬虫爬取中央气象台每日天气图