我正在以下方式使用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();
它不起作用,我的意思是文件没有被删除。
但如果在第3行
传递输出流的本地变量,则会起作用。
1 FileOutputStream fos = new FileOutputStream(finalFilename);
4 transformerFinal.transform(new StreamSource(tempFilename), new StreamResult(fos));
5 fos.close();
现在删除功能已经可以正常工作并且确实可以删除文件。
那么,如果我得出这样的结论:在
transform
过程中,输出流没有隐式关闭?因此,我必须显式地关闭流。请问是否有其他原因导致文件无法被删除?
请假设所有变量都具有正确的值。
谢谢。
更新
我注意到另一个问题。
我从另一个类调用此代码,例如 -
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
。
有什么想法,为什么会这样?