java怎么删除被进程占用的文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java怎么删除被进程占用的文件相关的知识,希望对你有一定的参考价值。

这个文件过一段时间后又会生成,所以要使用语句删,麻烦大家帮帮忙,最好使用java语句删,要简单的
附下是我写的代码,但只有在不被进程占用的情况下才会起作用
public static void main(String[] args)
// TODO Auto-generated method stub
File file = new File("C:\\ProgramData\\QvodPlayer\\");
File files[] = file.listFiles();
for (int i = 0; i < files.length; i++)
if (files[i].length() > 30000000)
System.out.print("s");
files[i].delete();




  删除被进程占用的文件,可以先判断文件是否被删除,如果没有,则让系统强制回收资源,进行文件的删除,示例如下:

boolean result = f.delete();//判断是否删除完毕
  if(!result)
   

    System.gc();//系统进行资源强制回收

    f.delete;

   
参考技术A

问题很明确,这个文件被QvodTerminal占用,需要kill进程。

如果遇到java自己占用了文件,System.gc();释放一下就能删了。

/**
 * 场景:locked.mp4被xx影音播放中,需要强行删除。
 */
@Test
public void testForceDeleteOutLock() 
File file = new File("g:/locked.mp4");
boolean result = forceDeleteOutLock(file, "StormPlayer.exe");
System.out.println(result);



public static boolean forceDeleteOutLocked(File fileForDel, String LockAppName) 
boolean result = false;
String cmd = "taskkill /f /im " + LockAppName;
try 
Runtime.getRuntime().exec(cmd);
Thread.sleep(1000);
result = fileForDel.delete();
 catch (IOException e) 
e.printStackTrace();
 catch (InterruptedException e) 
e.printStackTrace();

return result;

本回答被提问者和网友采纳
参考技术B 这个涉及到进程问题吧,貌似不是JAVA能控制的范畴。 参考技术C 重启一下就可以了呗。

以上是关于java怎么删除被进程占用的文件的主要内容,如果未能解决你的问题,请参考以下文章

文件删除后且被进程占用如何找回

文件删除后且被进程占用如何找回

文件删除后且被进程占用如何找回

文件删除后且被进程占用如何找回

文件删除后且被进程占用如何找回

查看被删除的但仍由进程占用的文件名