gpt4 book ai didi

java - 我可以访问 Lotus Notes 嵌入文件而不实际提取它们吗?

转载 作者:行者123 更新时间:2023-12-01 15:20:24 27 4
gpt4 key购买 nike

我正在研究一种以编程方式访问 Lotus Notes 数据库的方法,以收集给定时间段内嵌入式记录附件的信息。

我的目标是查找给定时间段内的记录,然后使用 Apache-POI 获取有关文档大小、字符数等的元数据。

POI 部分工作正常,到目前为止,借助此帮助,我已经能够访问 Lotus Notes 记录:

lotus notes search by date with Java api

这个答案还向我展示了如何下载/复制附件:

How do I get all the attachments from a .nsf(lotus notes) file using 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!

关于java - 我可以访问 Lotus Notes 嵌入文件而不实际提取它们吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11008128/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com