gpt4 book ai didi

java - 无法删除由 java Transformer 创建的文件

转载 作者:数据小太阳 更新时间:2023-10-29 02:05:39 28 4
gpt4 key购买 nike


我通过以下方式在 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 流时,我是否正确?因此我必须明确关闭流。
如果有任何其他原因可能无法删除文件,任何人都可以分享吗?

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

谢谢。

Update

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

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
知道为什么它会这样吗?

最佳答案

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

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

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

关于java - 无法删除由 java Transformer 创建的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5218129/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com