`
IvanLi
  • 浏览: 604070 次
  • 性别: 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 强制删除使用中的文件

    其`FileUtils.forceDelete()`方法可以尝试强制删除文件,包括处理被占用的情况。 4. **文件锁和JNI**:如果文件被Java进程自身锁定,可以使用JNI(Java Native Interface)调用本地方法解锁,但这涉及到更复杂的...

    运行状态强制删除文件自身【模块 例子】

    在提供的压缩包文件中,"运行状态强制删除文件自身【模块】.e"、"例子.e"和"运行状态强制删除文件自身【模块】.ec"可能包含了实现这一功能的具体代码示例。这些文件可能使用某种编程语言(如Erlang或Emacs Lisp)...

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

    例如,`del /f /q C:\path\to\file.txt`强制删除文件,`rd /s /q C:\path\to\directory`删除整个目录。`/f`表示强制删除,`/q`表示静默模式,不显示确认提示。 3. **安全模式启动**:如果上述方法都无效,可以重启...

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

    文件暴力删除工具是一款专门设计用来解决普通删除方法无法移除某些正在运行或被其他程序占用的文件问题的应用软件。在日常计算机操作中,我们可能会遇到这样的情况:一个文件因为正在被某个程序使用而无法直接删除,...

    Java语言深入文件和流

    在Java编程语言中,数据流通常指的是程序与外部设备(如磁盘文件)之间的数据交换过程。Java提供了强大的输入输出(I/O)系统来处理各种数据流,包括文件读写、网络通信等。Java的I/O系统主要由两大类构成:`...

    强制删除文件

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

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

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

    tomcat文件上传下载、删除

    4. 使用强制删除:Java的`Files`类提供了`delete()`方法,可以尝试强制删除,但请注意这可能导致数据丢失。 总结,Tomcat文件上传、下载和删除涉及的主要知识点包括HTTP协议、Servlet API、文件I/O操作以及权限管理...

    java 泛型方法使用示例

    Java 泛型是Java SE 5.0引入的一项重要特性,极大地增强了代码的类型安全性和重用性。...如果你想要进一步了解或实践,可以参考提供的`GenericMethod.java`源代码文件,或者查阅`Java.jpg`中的相关图片。

    Java文本文件

    从给定的文件标题、描述、标签以及部分内容中,我们可以提炼出多个与Java相关的知识点,以下是对这些知识点的详细解析: ### Java文本文件 #### Java面试题集锦,经典中的经典 这部分描述提示我们,文档内容可能...

    Alluxio java 客户端demo

    如果文件被其他进程使用,可能需要设置强制删除选项。此外,也可以使用`deleteRecursively`来递归删除目录及其所有内容。 5. **异常处理** 在进行Alluxio操作时,我们应始终处理可能出现的异常,例如`...

    java源码包3

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

    java源码包2

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

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

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

    文件处理方法类

    - `Files`类提供了更多选项的删除方法,如`Files.delete()`支持强制删除,即使文件被其他进程打开。 4. **临时文件**: - `java.io.tmpdir`系统属性定义了默认的临时文件路径。 - `File.createTempFile()`用于...

    文件暴力删除工具.rar

    强制删除可能会影响系统的稳定性,特别是当删除的是系统文件时。因此,使用前应确保知道要删除的文件不是关键系统文件,或者已经做好备份。 6. **数据恢复**:一旦文件被暴力删除,数据恢复的可能性降低。因此,...

    java常用代码方法

    在Java编程中,有一些常见的代码方法是每个开发者都需要掌握的。这些方法不仅提高了代码的可读性和可维护性,还能有效地解决日常编程问题。以下是一些关键的Java代码方法和相关知识点: 1. **字符串操作**: - `...

    清除那些正在运行而无法删除的文件KillBox-Beta

    KillBox的工作原理是基于进程终止和文件强制删除的技术。它能够识别出哪些进程正在占用目标文件,并给予用户权限结束这些进程,从而为删除文件扫清障碍。此外,KillBox还具备注册表清理功能,能处理那些与目标文件...

    java调用windows命令

    如果遇到无法删除的问题,可以尝试使用`Runtime.exec()`调用`del`命令强制删除文件。 在实际编程中,处理这些细节能够确保Java程序在Windows环境中正确地调用命令行操作。同时,为了提高代码的可维护性和可读性,...

    java课件——全面介绍java知识

    在Java中,接口提供了一种强制实现的方式,而抽象类则可以包含已实现的方法。 集合框架是Java中处理数据集合的重要工具,包括List、Set、Queue和Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等具体实现...

Global site tag (gtag.js) - Google Analytics