java html转换mht,在java中,分析如何读取或者解析 MHTML (. mht ) 文件

本文介绍了一个使用Groovy和Mime4J实现的Prototype'parseMhtToFile'函数,该函数可以从Cognos活动报告'mht'文件中提取并保存单独的HTML和其他类型的文件。文章还讨论了函数的工作原理及潜在的改进方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Prototype'parseMhtToFile'函数 below 从Cognos活动报告'mht'文件中删除html文件和其他工件,但可以根据其他目的定制。

这是用Groovy编写的,需要 Mime4J'核心层'和'dom'jars ( 当前 0.7.2 ) 。import org.apache.james.mime4j.dom.Message

import org.apache.james.mime4j.dom.Multipart

import org.apache.james.mime4j.dom.field.ContentTypeField

import org.apache.james.mime4j.message.DefaultMessageBuilder

import org.apache.james.mime4j.stream.MimeConfig

/**

* Use Mime4J MessageBuilder to parse an mhtml file (assumes multipart) into

* separate html files.

* Files will be written to outDir (or parent) as baseName + partIdx + ext.

*/

void parseMhtToFile(File mhtFile, File outDir = null) {

if (!outDir) {outDir = mhtFile.parentFile }

//File baseName will be used in generating new filenames

def mhtBaseName = mhtFile.name.replaceFirst(~/.[^.]+$/, '')

//-- Set up Mime parser, using Default Message Builder

MimeConfig parserConfig = new MimeConfig();

parserConfig.setMaxHeaderLen(-1);//The default is a mere 10k

parserConfig.setMaxLineLen(-1);//The default is only 1000 characters.

parserConfig.setMaxHeaderCount(-1);//Disable the check for header count.

DefaultMessageBuilder builder = new DefaultMessageBuilder();

builder.setMimeEntityConfig(parserConfig);

//-- Parse the MHT stream data into a Message object

println"Parsing ${mhtFile}...";

InputStream mhtStream = mhtFile.newInputStream()

Message message = builder.parseMessage(mhtStream);

//-- Process the resulting body parts, writing to file

assert message.getBody() instanceof Multipart

Multipart multipart = (Multipart) message.getBody();

def parts = multipart.getBodyParts();

parts.eachWithIndex { p, i ->

ContentTypeField cType = p.header.getField('content-type')

println"${p.class.simpleName}t${i}t${cType.mimeType}"

//Assume mime sub-type is a"good enough" file-name extension

//e.g. text/html = html, image/png = png, application/json = json

String partFileName ="${mhtBaseName}_${i}.${cType.subType}"

File partFile = new File(outDir, partFileName)

//Write part body stream to file

println"Writing ${partFile}...";

if (partFile.exists()) partFile.delete();

InputStream partStream = p.body.inputStream;

partFile.append(partStream);

}

}

用法简单:File mhtFile = new File('', 'Report-en-au.mht')

parseMhtToFile(mhtFile)

println 'Done.'

输出为:Parsing Report-en-au.mht...

BodyPart 0 text/html

Writing Report-en-au_0.html...

BodyPart 1 image/png

Writing Report-en-au_1.png...

Done.

关于其他改进的想法:例如对于 '文本'mime部件,可以访问Reader,而不是像操作请求那样更适合于文本挖掘。

对于生成的文件扩展名,我将使用另一个库查找适当的扩展,而不是假定mime子类型是足够的。

处理单个正文( 非多部分) 和递归多部分mhtml文件和其他。 这些可能需要一个带有自定义的内容处理程序( )的 MimeStreamParser插件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值