2007-08-21
Java 中强制删除文件的方法
关键字: java
在系统开发时,有时需要在程序中把正在用到plugin文件删除,重新更新。这需要首先在java程序中停止使用这个plugin文件,然后删除,重新更新。我在开发是遇到这样的问题,在java中停止使用了plugin文件,但是在用过FileObj.delete时,返回false,在文件系统中删除plugin文件时,OS报错,说该文件正在使用中,等几秒中在删除就可以删除了。
我猜想可能是java已经不用该plugin文件了,但是OS还认为该文件还在被使用,所以报错,所以就写了个方法来强制删除改文件,不知道这样写有没有什么不妥?欢迎来拍砖!
我猜想可能是java已经不用该plugin文件了,但是OS还认为该文件还在被使用,所以报错,所以就写了个方法来强制删除改文件,不知道这样写有没有什么不妥?欢迎来拍砖!
/**
* try to delete given file , try 10 times
* @param f
* @return true if file deleted success, nor false;
*/
public static boolean forceDelete(File f)
{
boolean result = false;
int tryCount = 0;
while(!result && tryCount++ <10)
{
logger.debug("try to delete file "+ f.getName() +" cnt:"+tryCount);
System.gc();
result = f.delete();
}
return result;
}
评论
。。。
2008-06-14
楼上,rm -f是Linux下用的.
lbfhappy
2008-06-14
rm -f 是什么命令?
我这里运行不出来啊
我这里运行不出来啊
wolfbrood
2008-06-14
lz这段代码肯定有问题,如果文件被一直占用,那么你即使删除一百次也删除不了,只有调用系统强制删除命令才可以。如楼上所说的那样。
yuther
2008-06-14
干嘛 不用jni来调用系统自带的rm -f命令?
xql80329
2008-06-13
如果现在删除了.那么后面其他程序用到 该怎么处理呢
zhh2115
2008-06-05
牛!我用可以啦,System.gc()很有用
sorphi
2007-08-22
是不是应该从classloader的实现入手?看载入jar时对底层文件是否加锁了?
http://blog.taragana.com/index.php/archive/how-to-unload-java-class/
http://blog.taragana.com/index.php/archive/how-to-unload-java-class/
抛出异常的爱
2007-08-22
Ivan Li 写道
我尝试过多次,一般情况下cnt=1时就能删除,现在cnt最大只是到5就结束了
加上超时代码吧。。。否则真的要是删到了系统文件就卡死了。
PS:gc是作什么用的?
去了是否就删不去了?
Ivan Li
2007-08-22
我尝试过多次,一般情况下cnt=1时就能删除,现在cnt最大只是到5就结束了
coolzyt
2007-08-21
这样10次太快了吧,可能还是删不掉,建议再加一个Thread.sleep(1000)?
jwmianzu
2007-08-21
楼主,System.gc()调用以后不适立刻就进行垃圾回收的,如果不是对跨平台要求严格看是否能用java调用系统的强行删除命令。别的办法我也不知道了
Ivan Li
2007-08-21
以下是commons-io里forceDelete的源码,它满足不了我上面说的需求
/**
* Delete a file. If file is a directory, delete it and all sub-directories.
* <p>
* The difference between File.delete() and this method are:
* <ul>
* <li>A directory to be deleted does not have to be empty.</li>
* <li>You get exceptions when a file or directory cannot be deleted.
* (java.io.File methods returns a boolean)</li>
* </ul>
*
* @param file file or directory to delete, must not be <code>null</code>
* @throws NullPointerException if the directory is <code>null</code>
* @throws IOException in case deletion is unsuccessful
*/
public static void forceDelete(File file) throws IOException {
if (file.isDirectory()) {
deleteDirectory(file);
} else {
if (!file.exists()) {
throw new FileNotFoundException("File does not exist: " + file);
}
if (!file.delete()) {
String message =
"Unable to delete file: " + file;
throw new IOException(message);
}
}
}
lighter
2007-08-21
commons io里面的FileUtils类有很多的类似删除的方法,如
FileUtils.forceDelete(file)
FileUtils.forceDelete(file)
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 245790 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
最新评论
-
关于jfreechart的两篇收费 ...
啥也不说了,都在心里
-- by cun2001 -
写给面试者--来至一线面试 ...
真的是什么观点都有啊!LZ写帖子绝对是好意,让我们平时面试时该注意的细节。对于丢 ...
-- by kayzhan -
写给面试者--来至一线面试 ...
flynetcn 写道忠告 2:为人要诚实,不要试图去蒙考官 --谁 ...
-- by javaeyexp -
python 奇特的传参方法
Java说:“我的反省能力很强”,Python就笑了Python异常灵活,一个小 ...
-- by widen -
Java 中强制删除文件的方 ...
楼上,rm -f是Linux下用的.
-- by 。。。






评论排行榜