3

我正在尝试使用 EmbeddedObjects 提取附件,我能够提取附件但在系统临时文件夹中创建 em*tm 临时文件。

 EmbeddedObject embeddedObject=document.getAttachment(attachmentName);
 InputStream inputStream=embeddedObject.getInputStream();
 .....
 ......
 inputStream.close();
 embeddedObject..recycle();
 document..recycle();

关闭输入流后,它不会从系统临时文件夹中删除临时文件。我的代码中是否有任何问题或 Lotus Notes 的设置问题。

你能帮我吗?

谢谢您的帮助。

4

2 回答 2

3

这是一个常见问题,它与对象的不正确关闭/回收(丢失或乱序)有关。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(); 
  }
于 2012-09-21T06:40:23.510 回答
1

我的建议是首先注释掉您在帖子中表示的所有代码

.....
......

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

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

于 2012-09-20T22:34:03.837 回答