java工具类mht转html格式文件
来源:互联网 发布:考勤系统数据库设计 编辑:程序博客网 时间:2024/05/21 06:15
package top.fqq.utils;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;import java.io.*;import java.util.Enumeration;/** * mht转html格式文件 * * @修改人 FQQ(www.first.top) * @版本号 1.0.0 @修改日期: 2016年11月02日 上午10:48:20 * @see [相关类/方法] * @since [产品/模块版本] */public class Mht2HtmlUtil { public static void main(String[] args) { Mht2HtmlUtil.mht2html("d:\\51job_111.mht", "d:\\test2222222222.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 = new File(new File(s_DescHtml).getAbsolutePath()); 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 s_HtmlTxt * @param s_HtmlPath * @param s_Encode */ 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; }}
0 0
- java工具类mht转html格式文件
- 用C#将html网页保存为mht格式文件
- Java实现 HTML to MHT
- Iframe不能解析mht格式文件
- mht转html代码(php)
- 用java实现将网页保存为mht文件工具
- C#实现 mht和word转html文件
- 0030-java 发 HTML格式文件 之一
- HTML文件转为MHT文件
- 使用java将网页保存为mht格式(转)
- java在Windows平台下面把word转mht
- java在Windows平台下面把word转mht
- java文件下载格式为html和mht后覆盖原来的页签?
- Java 将Word2003(doc)/Word2007(docx)转Html格式文件
- ubuntu下用java代码调用命令将java格式文件转换为html格式文件
- JSP 转换 mht java 代码
- HTML格式转成MHT格式的组件
- 支持htm,html转换成mht
- eCryptfs - unlink系统调用
- 【NOIP2013提高组T6】华容道-BFS+SPFA
- “Use Legacy Swift Language Version” (SWIFT_VERSION) is required to be configured
- python27+selenium+Phantomjs登录京东
- 数据结构实验之二叉树一:树的同构
- java工具类mht转html格式文件
- 深入浅出Docker Swarm架构与命令
- C语言程序设计实践-C语言应用实践
- 比较全的as快捷键整理
- 注释有问题的dubbo服务和 本地启动dubbo服务的网络IP问题
- binbinyang---Android实现显示GIF图片
- 异构、同构 &&异步、同步
- 8核、6核、4核、双核CPU是什么意思
- 使JAR在linux系统中一直处于后台执行