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

标签 java apache-poi lotus-notes

我正在研究一种以编程方式访问 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/

相关文章:

java - 创建 Java 代理与调用 Notes API - Louts Notes

java - 中断一个 while 循环,其中有一个 try-catch block

java - 在类型 "rf"中找不到名为 "mp3_organizer"的方法的适用重载

java - 使用excel工作簿时出现异常

java - 设置列类型: categorized in a Domino view via java via NCSO. jar

java - 使用 Java API 在 Lotus Notes 上进行 session 邀请

Java如何打印 "x"括号内的星星数

java - 无法解析 fragment 中的 getSupportActionBar() 方法

java - 如何使用 POI Excel 以编程方式拉伸(stretch)列以适合文本?

Java vector 数据分组-相关代码