我遇到了commons-io FileUtils.deleteDirectory(File)
的问题。我只是打电话给
FileUtils.deleteDirectory(new File("/tmp/dir"));
目录结构是:
tmp/
- dir/
- a/
- b/
- c.txt
我尝试使用以下结果进行调试:
if (!file.delete())
file.delete()
返回true
,程序以正常方式继续(文件仍然存在,但现在我无法重命名)if (!directory.delete())
delete()
返回false并且“无法删除目录/ tmp / dir / a / b /”异常被抛出我的奇怪行为是删除后存在c.txt文件并在其父目录上调用delete导致错误。该文件仅由Java程序使用。有什么建议?知道如果某些FileHandler仍然为文件打开,如何检查Java?
更新:已修复
我是愚蠢的混蛋,我再次检查了我的代码,我发现我错过了之前读过该文件的关闭流。我有一个读取输入的代码:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream is = new FileInputStream(new File("/tmp/dir/a/b/c.txt"));
IOUtils.copy(is, baos);
String content = new String(baos.toByteArray());
我改为(现在有效):
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream is = new FileInputStream(new File("/tmp/dir/a/b/c.txt"));
IOUtils.copy(is, baos);
// Close streams!
baos.flush();
baos.close();
is.close(); // This is the most important!
String content = new String(baos.toByteArray());
这只是一个例子,我知道正确关闭所有流(使用try-finally)非常重要。 BufferedInputStream在这里也很有用。