无法删除java Transformer创建的文件

时间:2011-03-07 09:49:30

标签: java xml


我以下列方式在java中使用Transformer类 -

1   Transformer transformerFinal = tFactory.newTransformer(new StreamSource(finalStylesheet));
2   transformerFinal.setParameter("Date", sdf.format(myDate));
3   transformerFinal.transform(new StreamSource(tempFilename), new StreamResult(new FileOutputStream(finalFilename)));

然后我想删除用于转换的源文件。

4       File fileToDelete = new File(tempFilename);                    
5       fileToDelete.delete();

它不起作用,我的意思是文件没有被删除 但是如果在line 3我传递了o / p流的局部变量即。

1   FileOutputStream fos = new FileOutputStream(finalFilename);
4   transformerFinal.transform(new StreamSource(tempFilename), new StreamResult(fos));
5   fos.close();

现在删除功能有效,它确实删除了文件 所以,我是否正确,当我得出结论在transform过程中o / p流没有隐式关闭?因此我必须明确关闭流 任何人都可以分享,如果有任何其他原因该文件可能不会被删除?

请假设所有变量都具有正确的值。

谢谢。

  

更新

我注意到了另外一件事 我从另一个类调用此代码,例如。 -

public class ClassTwo {
   public void ameth(String tempFilename) {
     // the above mentioned transformation code
   }
}

1   public class ClassOne {
2       public void method1() {
3           ClassTwo ct = new ClassTwo();
4           ct.ameth("tempFilename1");
5           ct.ameth("tempFilename2");
6       }
7   }

此处,当我没有明确关闭流时,它确实删除了tempFilename2,但没有删除tempFilename1。 任何想法,为什么它表现如此?

1 个答案:

答案 0 :(得分:5)

您说得对:您无法删除仍处于打开状态的文件。由于Java API中存在旧错误,delete()无法告诉您原因 - 它只能返回boolean结果。

此行为的原因是Java无法自动清除堆内存以外的系统资源。所以我们最终遇到了问题:谁可以安全地关闭文件?也许转型尚未完成。或者您需要在同一个流中编写标题+页脚。

因此,如果创建了一个流,总是要关闭它。