Lotus notes 使用EmbeddedObject从lotus notes api提取附件,在系统文件夹中创建eo*tm文件

Lotus notes 使用EmbeddedObject从lotus notes api提取附件,在系统文件夹中创建eo*tm文件,lotus-notes,lotus-domino,lotus,Lotus Notes,Lotus Domino,Lotus,我正在尝试使用EmbeddedObjects提取附件,我可以提取附件,但可以在system temp文件夹中创建em*tm temp文件 EmbeddedObject embeddedObject=document.getAttachment(attachmentName); InputStream inputStream=embeddedObject.getInputStream(); ..... ...... inputStream.close(); embeddedObject

我正在尝试使用EmbeddedObjects提取附件,我可以提取附件,但可以在system temp文件夹中创建em*tm temp文件

 EmbeddedObject embeddedObject=document.getAttachment(attachmentName);
 InputStream inputStream=embeddedObject.getInputStream();
 .....
 ......
 inputStream.close();
 embeddedObject..recycle();
 document..recycle();
关闭输入流后,不会从系统临时文件夹中删除临时文件。 我的代码中是否有任何错误,或者LotusNotes的设置问题

你能帮我吗


谢谢你的帮助。

我的建议是首先将你在帖子中表示为

.....
......
临时文件是否仍然落后?如果是这样的话,它看起来像是8.x的Notes后端类中的一个bug,需要向IBM报告


如果没有,则注释掉的代码中的某些内容会阻止close()调用的成功。InputStream是一个抽象类,因此您可能正在将InputStream绑定到另一种类型的流对象,该对象必须关闭,以防止文件保持打开状态。

这是一个常见问题,它与对象的错误关闭/回收有关(丢失或无序)。E0*TM文件将在对象处于活动状态时创建,并在回收时清理

如果它们是正确的,那么检查是否有任何正在运行的阻止删除的防病毒软件

下面的示例代码是我在工作之前用来测试它的,所以请与您的代码进行比较

  try { 

   System.out.println("Start"); 
   String path = "test.txt";    

   Session session = getSession();  
   AgentContext agentContext = session.getAgentContext();   

   System.out.println("Get DB");    
   Database db = session.getCurrentDatabase();  

   System.out.println("View + doc");    
   View vw = db.getView("main");    
   Document doc = vw.getFirstDocument();    

   System.out.println("Embedded object");   
   EmbeddedObject att = doc.getAttachment(path);    
   InputStream is = att.getInputStream();   
   ByteArrayOutputStream fos = new ByteArrayOutputStream(); 

   byte buffer[] = new byte[(int) att.getFileSize()];   
   int read;    
   do { 
    read = is.read(buffer, 0, buffer.length);   
    if (read > 0) { 
     fos.write(buffer, 0, read);    
    }   
   } while (read > -1); 

   fos.close(); 
   is.close();

   // recycle the domino variables  
   doc.recycle();   
   vw.recycle();    
   db.recycle();    
   att.recycle();   

  } catch (Exception e) {   
   e.printStackTrace(); 
  }

embeddedObject.recycle();document.recycle();很抱歉,它是.recycle();它不是;六羟甲基三聚氰胺六甲醚。。。我以前忘记关闭InputStream时遇到了这些临时文件。事实上,我向IBM提交了一份报告,因为当时的文档从未提到关闭流的要求。现在是了。事实上,doc现在包含了我向IBM建议的确切语言。所以这很神秘。如果这是一个通常可重复的场景,那么这将是一个严重的bug。您使用的是什么版本的Notes或Domino?感谢您的回复,我使用的是Lotus Notes 8。这是代理还是独立的Java代码?单线程还是多线程?它的独立java程序。它是单线程的。代码在。。。。。创建新的DTO(数据传输对象)对象,并将所有附件属性和文档标题信息放入DTO对象中。附件属性是指附件名称、大小、发件人地址等。。。我试着注释掉所有仍然在创建eo..tm文件的东西。我已经写了一个批处理文件,每小时删除一次。这是一个解决办法,但不是解决办法。谢谢你的帮助。这是非常有趣的信息。谢谢我必须去检查我们使用EmbeddedObject.getInputStream()的代码,看看它是否回到了保留文件的状态。还有一个想法:是否有可能您的代码吞没了一个异常而没有实际调用recyle()方法?我通常将recycle()调用放在finally{}块中,这只是为了确定。(我在调用recycle()之前也会检查null,以防异常首先阻止对象被实例化。)我正在回收我的所有lotus notes对象,仍然没有线索:(我的代码也与您的代码类似。我正在阅读所有电子邮件,并回收我的domino对象以获取更多信息(int i=0;代理完成后,文件是否得到清理?如果没有清理,请尝试Sysinternals工具process manager来监视哪些内容正在接触这些文件。