【发布时间】:2021-08-01 10:12:59
【问题描述】:
我只是根据过滤器删除文件
public void delete(String folder, String filter){
File f = new File(path);
String[] files = f.list();
for (string s : files){
if (s.indexOf(filter) >= 0){
new File(folder + s).delete();
}
}
}
这通常会在几微秒内顺利进行。
但有时,我有用户报告此部分挂起。如果应用程序长时间无响应,我会杀死它并获取堆栈跟踪,这就是线程所在的位置:
在 java.io.WinNTFileSystem.delete
有时写入文件时也会发生这种情况。我想知道它是否可以被JVM锁定的文件。有什么方法可以检查吗?
【问题讨论】:
-
这很可能是 Windows 问题。该文件可能已被锁定或类似情况。
-
您是否要删除远程文件系统上的文件?如果是这样,任何事情都可能发生,包括什么也没有。
-
文件在 PC 上是本地的。我认为这些文件很可能在我操作它们时被其他进程访问,甚至可能在 java 调用期间。如果一个文件正在被操作,而另一个进程在此期间将其锁定,这是预期的行为吗?
-
不要使用
delete()。尝试使用Files.delete()。 -
问题是我不仅在 File.delete() 中看到了这一点,还在写入文件中看到了这一点。我可能会尝试将所有文件操作转换为文件,这是个好主意。
标签: java