我工作的编程访问Lotus Notes数据库在一定时期内收集的记录的嵌入式附件信息的一种方式。
我的目标是要找到某个时间段内的记录,然后使用Apache的POI,以获取有关文件的大小,字符数,元数据等。
该POI部分工作正常,到目前为止,我已经能够访问Lotus Notes记录感谢这个帮助:
Lotus Notes的日期与Java API搜索
而这个问题的答案也说明我如何下载/复制附件:
我如何得到所有从.NSF附件(Lotus Notes)中使用的Java文件
从那里我可以用我的POI的代码做我的工作,到了最后,只是删除复制的附件。 这种做法,基本上工作,但我想避免复制的开销,节约型,然后在最后删除了我从数据库中,这些附加文件副本。
我想经过EmbeddedObject的getSource()方法的结果作为输入到我的POI的代码,并获得在期待一个字符串,使文件的POI代码FileNotFoundException异常。
有没有得到一个文件引用我可以传递给POI,而不复制和保存附件的方式? 或者说,我的意思是,它是那样简单获取文件(+路径)对Lotus Notes EmbeddedObject附件,我该怎么办呢?
我找到了答案,并张贴在下面。
回答我的问题?
...这里是我发现了一个小而发布上述问题后的解决方案:
EmbeddedObject的的getInputStream救援......
//from the answer in the link in the question above
Database db = agentContext.getCurrentDatabase();
DocumentCollection dc = db.getAllDocuments();
Document doc = dc.getFirstDocument();
boolean saveFlag = false;
while (doc != null) {
RichTextItem body =
(RichTextItem)doc.getFirstItem("Body");
System.out.println(doc.getItemValueString("Subject"));
Vector v = body.getEmbeddedObjects();
Enumeration e = embeddedObjs.elements();
while(e.hasMoreElements()){
EmbeddedObject eo = (EmbeddedObject)e.nextElement();
if(eo.getType() == EmbeddedObject.EMBED_ATTACHMENT){
//this next line gives Apache-POI access to the InputStream
InputStream is = eo.getInputStream();
POIFSFileSystem POIfs =
HWPFDocument.verifyAndBuildPOIFS(is);
POIOLE2TextExtractor extractor =
ExtractorFactory.createExtractor(POIfs);
System.out.println("extracted text: " + extractor.getText());
is.close(); //closing InputStream
}
eo.recycle(); //recycling EmbeddedObject
//thanks to rhsatrhs for the close() and recycle() tip!
文章来源: Can I get access to Lotus Notes embedded files without actually extracting them?