博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java的File类的 delete方法删不掉文件的原因分析
阅读量:7121 次
发布时间:2019-06-28

本文共 2609 字,大约阅读时间需要 8 分钟。

先举几个可以删除掉文件和删除不掉文件的例子(先在F盘创建test1.txt文件,然后可以直接拷贝代码到IDE执行),最后总结下原因:

例子一:下面的例子毫无疑问是能够删除掉文件的

import java.io.File;import java.io.IOException;public class Test {    public static void main(String[] args) throws IOException {        File file = new File("F:/test1.txt");        file.delete();    }}

原因:一个进程内(或者线程)单个线程执行,不存在资源共享的问题,所以可以删除。

例子二:下面的例子会删除成功,但是后面会报找不到文件的异常

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;public class Test {    public static void main(String[] args) throws IOException {        FileOutputStream fos = null;        File file = new File("F:/test1.txt");        if (!file.exists()) {            file.createNewFile();            // 构造写入文件内容            fos = new FileOutputStream(file);            fos.write("Hello Wolrd".getBytes());        }        file.delete();        InputStream inputStream = new FileInputStream(file);    }}

原因:即使后面的InputStream使用到file,但是红线处的delete方法已经把文件删除了,所以会报找不到系统文件的异常。接着看下面的例子。

例子三:下面的例子会删除失败,原因是InputStream正在使用file,IO流还没有关闭

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;public class Test {    public static void main(String[] args) throws IOException {        FileOutputStream fos = null;        File file = new File("F:/test1.txt");        if (!file.exists()) {            file.createNewFile();            // 构造写入文件内容            fos = new FileOutputStream(file);            fos.write("Hello Wolrd".getBytes());        }        InputStream inputStream = new FileInputStream(file);        file.delete();    }}

删除失败,原因是后面的InputStream使用到file,而且InputStream没有关闭流,所以导致删除失败。

例子四:下面的例子会删除成功,原因是后面的InputStream先关闭IO流了再删除

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;public class Test {    public static void main(String[] args) throws IOException {        FileOutputStream fos = null;        File file = new File("F:/test1.txt");        if (!file.exists()) {            file.createNewFile();            // 构造写入文件内容            fos = new FileOutputStream(file);            fos.write("Hello Wolrd".getBytes());        }        InputStream inputStream = new FileInputStream(file);        // 关闭流        if (inputStream != null) {            inputStream.close();        }        file.delete();    }}

原因:删除成功,原因是后面的InputStream先关闭IO流了再调用delete方法删除文件,可以和例子三对比下不同之处就明白了。

接下来总结File的delete方法需要注意的一些地方:

1. 如果要删除的文件正在被占用,文件会删不掉,例如别的程序还在对文件进行读取操作,没来得及释放文件,后边的程序就试图删除该文件,会导致删除失败。

2. 使用IO操作文件的过程中要记得关闭流,这是做程序员的最基本素质。

转载地址:http://qoiel.baihongyu.com/

你可能感兴趣的文章
Node.js 非阻塞的 Sleep 要怎么写 ?
查看>>
Python基础(十八): 类和对象以及它们的属性
查看>>
java B2B2C Springcloud仿淘宝电子商城系统
查看>>
【动画】当我们在读写Socket时,我们究竟在读写什么?
查看>>
Android Studio 修改包名 com.example.calculator----->com.melon.calculator
查看>>
SpringBoot Cache 深入
查看>>
解决POI大数据导出Excel内存溢出、应用假死
查看>>
AI考拉技术分享会--IDE 常用功能 for Node.js
查看>>
vue常见知识点总结
查看>>
NioEventLoopGroup 源码分析
查看>>
入行AI,从何做起—光环&飞马网直播课回顾
查看>>
区块链技术与比特币
查看>>
TypeScript--函数
查看>>
【CuteJavaScript】Angular6入门项目(1.构建项目和创建路由)
查看>>
Three.js Scene Graph
查看>>
构造函数创建私有变量(防继承)
查看>>
PAT A1045 动态规划
查看>>
前端技术周刊 2019-02-11 Serverless
查看>>
DAppDiscover | 盘点2018年度十大DAPP
查看>>
Ghost配置6——首页太阳系动画效果
查看>>