`
IvanLi
  • 浏览: 599436 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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;
	}
分享到:
评论
14 楼 。。。 2008-06-14  
楼上,rm -f是Linux下用的.
13 楼 lbfhappy 2008-06-14  
rm -f 是什么命令?
我这里运行不出来啊
12 楼 wolfbrood 2008-06-14  
lz这段代码肯定有问题,如果文件被一直占用,那么你即使删除一百次也删除不了,只有调用系统强制删除命令才可以。如楼上所说的那样。
11 楼 yuther 2008-06-14  
干嘛 不用jni来调用系统自带的rm -f命令?
10 楼 xql80329 2008-06-13  
如果现在删除了.那么后面其他程序用到 该怎么处理呢
9 楼 zhh2115 2008-06-05  
牛!我用可以啦,System.gc()很有用
8 楼 sorphi 2007-08-22  
是不是应该从classloader的实现入手?看载入jar时对底层文件是否加锁了?


http://blog.taragana.com/index.php/archive/how-to-unload-java-class/
7 楼 抛出异常的爱 2007-08-22  
Ivan Li 写道
我尝试过多次,一般情况下cnt=1时就能删除,现在cnt最大只是到5就结束了

加上超时代码吧。。。否则真的要是删到了系统文件就卡死了。
PS:gc是作什么用的?
去了是否就删不去了?
6 楼 IvanLi 2007-08-22  
我尝试过多次,一般情况下cnt=1时就能删除,现在cnt最大只是到5就结束了
5 楼 coolzyt 2007-08-21  
这样10次太快了吧,可能还是删不掉,建议再加一个Thread.sleep(1000)?
4 楼 jwmianzu 2007-08-21  
楼主,System.gc()调用以后不适立刻就进行垃圾回收的,如果不是对跨平台要求严格看是否能用java调用系统的强行删除命令。别的办法我也不知道了
3 楼 jwfpd 2007-08-21  
Ivan Li 写道
以下是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);
            }
        }
    }
收下啊
2 楼 IvanLi 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);
            }
        }
    }
1 楼 lighter 2007-08-21  
commons io里面的FileUtils类有很多的类似删除的方法,如
FileUtils.forceDelete(file)

相关推荐

    java 强制删除使用中的文件

    本实例利用java强制删除使用中的文件,demo中删除的是mdb文件,首先利用jdbc获取mdb的数据库连接,再打开mdb文件,程序照样能强制删除!类似于360强制删除文件

    强制删除文件

    把要删除的文件或者目录拖放到这个bat文件的图标上就可以删除了!

    java源码包---java 源码 大量 实例

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    文件暴力删除工具 1[1].4┊删除运行中文件或者被占用的文件

    文件暴力删除工具 1[1].4┊删除运行中文件或者被占用的文件 文件暴力删除工具 1[1].4┊删除运行中文件或者被占用的文件 文件暴力删除工具 1[1].4┊删除运行中文件或者被占用的文件

    JAVA上百实例源码以及开源项目

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    强行删强行 删除 目录文件 强行删除目录 文件

    在删除文件或目录时,你是否碰上“正在使用,无法删除”之类的提示?没关系,你非删不可是吧?来,用这个吧!

    java源码包2

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    java源码包4

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    java源码包3

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    Java开发技术大全(500个源代码).

    invokeMethod.java 同一个类中调用方法示例 invokeOther.java 类的外部调用方法示例 invokeStaticMethod.java 调用静态方法示例 localVariable.java 演示局部变量 localVSmember.java 局部变量与成员变量同名...

    JAVA上百实例源码以及开源项目源代码

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...

    JAVA WEB框架,java网站一个模块只用写一个文件

    JAVA WEB框架,java网站一个模块只用写一个文件 以前的servlet在现在的开发中已经不怎么常见,因为操作起来比较原始和麻烦。有些人就是不安于现状去改造它。 做得好的有Struts,Hybernate,Spring那么这些框架都是很...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    第7章 Java中的方法——给汽车丰富多彩的功能 154 教学视频:2小时55分钟 7.1 方法:让汽车动开动 154 7.1.1 引出问题:开动汽车 154 7.1.2 那么,方法到底是什么呢? 155 7.1.3 方法调用过程初探 156 7.2 ...

    JAVA上百实例源码以及开源项目源代码 java开源包2

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    第7章 Java中的方法——给汽车丰富多彩的功能 154 教学视频:2小时55分钟 7.1 方法:让汽车动开动 154 7.1.1 引出问题:开动汽车 154 7.1.2 那么,方法到底是什么呢? 155 7.1.3 方法调用过程初探 156 7.2 ...

    java 面试题 总结

    动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面...

    递归删除文件

    用递归的方法删除一个目录下的所有文件及子目录.代码在这一个java类中.在main方法中写个存在的目录(最好是不用了的),直接运行可看到效果

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...

Global site tag (gtag.js) - Google Analytics