자바 mht 를 html 로 변환

9055 단어 자바
프로젝트 에 mht 온라인 미리 보기 가 필요 하기 때문에 인터넷 에서 코드 를 한 무더기 찾 은 후에 차이 가 별로 없다.아직 정상적으로 컴 파일 이 통과 되 지 않 았 다.마지막 으로 자신 이 코드 를 분석 하여 수정 하기 로 결정 하고 그 중의 일부 BUG 를 수정 한 다음 에 정상적으로 컴 파일 하여 정상 적 인 테스트 를 통과 했다.여러분 과 함께 나누다.
필요 한 Jar 맨 아래 에서 다운로드 할 수 있 습 니 다.

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.Enumeration;
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; 

public class HtmlApplication{
public static void main(String[] args){
		HtmlApplication.mht2html("C:\\Documents and Settings\\Administrator\\  \\test2.mht", "C:\\test2\\test.html");
	}

/**
 *   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
", ""); // 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) { strHtml.append(strLine + "\r
"); } 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().compareTo("Content-Type") == 0) { 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; } }

좋은 웹페이지 즐겨찾기