我有以下Java代码,它遍历目录中的所有文件并删除它们.
for(File file : tmpDir.listFiles())
{
file.delete();
}
Run Code Online (Sandbox Code Playgroud)
但它不会删除所有文件.当我这样做时,一些,通常是20到30,中有几千.是否有可能解决这个问题,或者我偶然发现了一些最好独自留下的Java巫毒?
Bor*_*der 11
它返回一个boolean值,你应该检查一下.来自JavaDoc:
返回:当且仅当文件或目录被成功删除时返回true; 否则是假的
您应该检查退货的价值并采取行动.
如果它返回,false则可能是您没有删除该文件的权限.
在这种情况下,您可以检查文件是否可由应用程序写入,如果没有尝试使其可写 - 再次返回a boolean.如果成功,您可以再次尝试删除.
您可以使用实用程序方法:
private void deleteFile(final File f) throws IOException {
if (f.delete()) {
return;
}
if (!f.canWrite() && !f.setWritable(true)) {
throw new IOException("No write permissions on file '" + f + "' and cannot set writeable.");
}
if (!f.delete()) {
throw new IOException("Failed to delete file '" + f + "' even after setting writeable; file may be locked.");
}
}
Run Code Online (Sandbox Code Playgroud)
我也会在JavaDoc中接受他们的建议:
请注意,Files类定义了删除方法,以便在无法删除文件时抛出IOException.这对于错误报告和诊断无法删除文件的原因很有用.
前提是您使用的是Java 7.该方法抛出了许多可以处理的异常:
try {
Files.delete(path);
} catch (NoSuchFileException x) {
System.err.format("%s: no such" + " file or directory%n", path);
} catch (DirectoryNotEmptyException x) {
System.err.format("%s not empty%n", path);
} catch (IOException x) {
// File permission problems are caught here.
System.err.println(x);
}
Run Code Online (Sandbox Code Playgroud)
从Oracle教程页面获取的示例.
| 归档时间: |
|
| 查看次数: |
2215 次 |
| 最近记录: |