java file类delete()方法无法删除文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java file类delete()方法无法删除文件相关的知识,希望对你有一定的参考价值。

代码如下
System.out.println("exists?"+fileTxt[ j ].exists()); //返回true 文件存在
boolean b=fileTxt[ j ].delete();
System.out.println("delete?"+b); //false 文件删除失败
不是每次都删不掉,有时可以删除。web程序
txt文件可以新建、编辑,就是不能删除,我手动删除时提示:操作无法完成,因为文件已经在Java(TM) Platform SE binary打开。这是什么情况?最后一个bug了,大神帮忙啊。

通过fileTxt[ j ] ,看你是循环删除,你判断了文件是否存在,但是没有判断是否是文件夹、文件夹里是否还有文件

因为文件夹里有文件时,执行delete()是不成功的
此外,你在删除的文件,有可能正被其他人或程序打开,这个时候删除也不会成功

参考Java API的java.io.File类:
delete
public boolean delete()

删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则此目录必须为空才能删除。追问

txt文件可以新建、编辑,就是不能删除,我手动删除时提示:操作无法完成,因为文件已经在Java(TM) Platform SE binary打开。这是什么情况,最后一个bug了,大神帮忙啊。

追答

你操作的文件的流Strame没有关闭
检查你的代码,InputStrame、OutputStrame有没有关闭
不然通过File.delete方法删除文件会失败

很久没上百度了,回答不及时,不好意思

参考技术A java.io包是Java最开始对文件操作的实现类,里面有很多方法实现的并不完善。例如非阻塞IO、文件软链、硬链等。

后来Java提供了nio包,完善了一些io包的不足,提供了更多功能的本地、网络I/O操作,例如:非阻塞IO。

可以尝试调用java.nio.file.Files.delete(Path);,在删除文件出现问题时,可能会抛出NoSuchFileException,DirectoryNotEmptyException,IOException,SecurityException
可以更方便的定位无法删除文件的原因。而java.io.File.delete();方法不提供这些功能

java.nio.file.Path path = java.nio.file.Paths.get(fileTxt[j]);
java.nio.file.Files.delete(path);追问

需要从外界导入包吗?系统报错,找不到方法

追答

你用的JDK什么版本?

追问

txt文件可以新建、编辑,就是不能删除,我手动删除时提示:操作无法完成,因为文件已经在Java(TM) Platform SE binary打开。这是什么情况,最后一个bug了,大神帮忙啊。

参考技术B 打开任务管理器,选到性能选项卡,下面有个资源模拟器点开,点开后选到CPU选项卡,
下面有个输入框的地方输入你的文件完整路径点检索

删不掉的时候可以看看有哪些地方在使用你这个文件追问

explorer.exe 2996 File F:\myBox\cdy\notebook\·
explorer.exe 2996 File F:\myBox\cdy\notebook\·
javaw.exe 6004 File F:\myBox\cdy\notebook\我的心情\·
javaw.exe 6004 File F:\myBox\cdy\notebook\我的心情\·

参考技术C 该文件被其他程序打开没有关闭 参考技术D 有的时候是被占用了,删除不了

Java的File类浅析

File类,输入输出流基本上是离不开File类的。

File类里面常用的构造方法

File(String pathname)
File(File parent, String child)
File(String parent, String child)
File(URI uri)

 

常用实例方法

canRead()
canWrite()
canExecute()
delete()
getAbsolutePath()
getName()
getParent()
isFile()
isDirectory()
mkdir()
length()

 

代码示例。

注意:在Windows中用""来分割路径,但是在java代码里面可以用"/"来分割Windows的路径,不会错,而且不需要转义。

import org.testng.annotations.Test;

import java.io.File;
import java.io.IOException;

public class FileDemo {

    @Test
    public void fileTest() throws IOException {

        //获取操作系统默认的文件路径分隔符
        String sp = File.separator;
        System.out.println("The name separater on Windows is:" + sp);

        //System.getProperty("user.dir")用来获取用户的当前目录
        String currentDir = System.getProperty("user.dir");
        System.out.println("The current directory is :" + currentDir);

        //在当前路径的路径创建一个文件实例
        File tom = new File("tom.txt");
        //这一步才是真正创建了实实在在存在的文件
        tom.createNewFile();

        File jerry = new File("D:\ideaSpace\LearnJava01\jerry.txt");
        //这一步才是真正创建了实实在在存在的文件
        jerry.createNewFile();

        File sam = new File("D:\ideaSpace\LearnJava01\sam.txt");
        //这一步才是真正创建了实实在在存在的文件
        sam.createNewFile();

        //获取文件绝对路径
        System.out.println(jerry.getAbsolutePath());

        //获取文件长度
        System.out.println(jerry.length());

        //获取名称分隔符的上一级,下面的参数里面有一个分隔符"/"将返回斜杠前面的一层
        //如果没有名称分隔符,也就是斜杠,将返回null
        File alice = new File("LearnJava01/alice.txt");
        System.out.println(alice.getParent());
    }


}

 

结果

The name separater on Windows is:The current directory is :D:ideaSpaceLearnJava01
D:ideaSpaceLearnJava01jerry.txt
17
LearnJava01

 

以上是关于java file类delete()方法无法删除文件的主要内容,如果未能解决你的问题,请参考以下文章

Java File类学习 <二>

Java File的delete和deleteOnExit区别

java File类常用方法

Java26File类:new File(),递归

java文件删除

JAVA删除文件或者文件夹