首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Java 中强制删除资料的方法

2012-10-30 
Java 中强制删除文件的方法在系统开发时,有时需要在程序中把正在用到plugin文件删除,重新更新。这需要首先

Java 中强制删除文件的方法
在系统开发时,有时需要在程序中把正在用到plugin文件删除,重新更新。这需要首先在java程序中停止使用这个plugin文件,然后删除,重新更新。我在开发是遇到这样的问题,在java中停止使用了plugin文件,但是在用过FileObj.delete时,返回false,在文件系统中删除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;}
/** * 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); } } }/** * 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); } } }收下啊 4 楼 jwmianzu 2007-08-21   楼主,System.gc()调用以后不适立刻就进行垃圾回收的,如果不是对跨平台要求严格看是否能用java调用系统的强行删除命令。别的办法我也不知道了 5 楼 coolzyt 2007-08-21   这样10次太快了吧,可能还是删不掉,建议再加一个Thread.sleep(1000)? 6 楼 IvanLi 2007-08-22   我尝试过多次,一般情况下cnt=1时就能删除,现在cnt最大只是到5就结束了 7 楼 抛出异常的爱 2007-08-22   Ivan Li 写道我尝试过多次,一般情况下cnt=1时就能删除,现在cnt最大只是到5就结束了
加上超时代码吧。。。否则真的要是删到了系统文件就卡死了。
PS:gc是作什么用的?
去了是否就删不去了? 8 楼 sorphi 2007-08-22   是不是应该从classloader的实现入手?看载入jar时对底层文件是否加锁了?


http://blog.taragana.com/index.php/archive/how-to-unload-java-class/ 9 楼 zhh2115 2008-06-05   牛!我用可以啦,System.gc()很有用 10 楼 xql80329 2008-06-13   如果现在删除了.那么后面其他程序用到 该怎么处理呢 11 楼 yuther 2008-06-14   干嘛 不用jni来调用系统自带的rm -f命令? 12 楼 wolfbrood 2008-06-14   lz这段代码肯定有问题,如果文件被一直占用,那么你即使删除一百次也删除不了,只有调用系统强制删除命令才可以。如楼上所说的那样。 13 楼 lbfhappy 2008-06-14   rm -f 是什么命令?
我这里运行不出来啊 14 楼 。。。 2008-06-14   楼上,rm -f是Linux下用的.

热点排行