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的文件格式,在网上找了一些工具,但是这些工具不是需要注册账号,就是需要下载软件. 而 ...
最新文章
- GROMACS运行参数整理(二)
- 15-CoreData删除所有数据之NSBatchDeleteRequest
- 程序员怎样才能写出一篇好的技术文章
- Windows系统程序设计之结构化异常处理
- java代码实现链表_java单链表代码实现
- 有些文档,本来想整理整理贴出来,
- 多角度分析,通讯时序数据的预测与异常检测挑战
- java 调用foxmail_Javamail简单使用案例
- 招聘ASP.net高级Web开发工程师
- python怎么读程序-python怎么读sql数据?
- 管理感悟:如何改造代码
- 考研日语线上笔记(一):考研日语203大纲陌生、易混词汇本
- JVM内存模型和性能调优:JVM整体结构及内存模型- 第10篇
- 红米3s进不了recovery_红米 3S中文Recovery刷机教程
- 如何用电脑下载微信视频号中的视频?
- TestCenter测试管理工具功能详解十四(S)
- Tech Talk 宣传 | 如何高效、极简构造无服务器 Web 应用
- Word中的拼页、书籍折页、反向书籍折页(二)
- 【移动通信】信号质量评估RSRP和SINR
- Java学习路线,java学习教程(入门到精通)
热门文章
- Java去除中英文标点符号
- 卖身百度,是知乎最好的结局?
- 机器人挠人脚心_美国惊现“挠脚狂魔” 潜入宿舍挠人脚心
- html5 css 插入视频,HTML+CSS入门 HTML网页中插入视频各种方法
- 中国研发经费投入逼近2万亿,保持两位数增速,企业成为主要力量
- pycharm 安装pip 详细步骤
- Learning optical flow from still images
- vijos-伊甸园日历游戏
- 方差递推公式_常见递推公式(数学)
- [ZT]智能客户端(Smart Client)