锁定老帖子 主题:Java 中强制删除文件的方法
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-08-21
我猜想可能是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; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-08-21
commons io里面的FileUtils类有很多的类似删除的方法,如
FileUtils.forceDelete(file) |
|
返回顶楼 | |
发表时间: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); } } } |
|
返回顶楼 | |
发表时间:2007-08-21
楼主,System.gc()调用以后不适立刻就进行垃圾回收的,如果不是对跨平台要求严格看是否能用java调用系统的强行删除命令。别的办法我也不知道了
|
|
返回顶楼 | |
发表时间:2007-08-21
这样10次太快了吧,可能还是删不掉,建议再加一个Thread.sleep(1000)?
|
|
返回顶楼 | |
发表时间:2007-08-22
我尝试过多次,一般情况下cnt=1时就能删除,现在cnt最大只是到5就结束了
|
|
返回顶楼 | |
发表时间:2007-08-22
Ivan Li 写道 我尝试过多次,一般情况下cnt=1时就能删除,现在cnt最大只是到5就结束了
加上超时代码吧。。。否则真的要是删到了系统文件就卡死了。 PS:gc是作什么用的? 去了是否就删不去了? |
|
返回顶楼 | |
发表时间:2007-08-22
是不是应该从classloader的实现入手?看载入jar时对底层文件是否加锁了?
http://blog.taragana.com/index.php/archive/how-to-unload-java-class/ |
|
返回顶楼 | |
发表时间:2008-06-05
牛!我用可以啦,System.gc()很有用
|
|
返回顶楼 | |
发表时间:2008-06-13
如果现在删除了.那么后面其他程序用到 该怎么处理呢
|
|
返回顶楼 | |