先举几个可以删除掉文件和删除不掉文件的例子(先在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操作文件的过程中要记得关闭流,这是做程序员的最基本素质。

java的File类的 delete方法删不掉文件的原因分析的更多相关文章

  1. java 之 file类的一些方法

    File类: File类是java.io包下代表与平台无关的文件和目录,也就是说,如果希望在程序中操作文件和目录,都可以通过File类来完成.但是File不能访问文件内容本身. 访问文件和目录: 1. ...

  2. java之io之File类的list()方法过滤目录的使用

    java的io的知识中,File类必须掌握.File类是对文件或者文件夹的封装.它本身并不能对所封装的文件进行读写,它封装的只是文件或文件夹的周边知识,比如 大小啦,创建日期啦,路径啦等等. 如果Fi ...

  3. Java 中File类的createNewFile()与createTempFile(), delete和deleteOnExit区别

    1. Java 中File类的createNewFile()与createTempFile()的区别 最近,在看代码时看到了一个方法, File.createTempFile() ,由此联想到File ...

  4. Java学习笔记-File类的基本方法

    要渐渐养成写博客的习惯-----> 前段时间看Mars的java中的I/O流没怎么懂,发现I/O流好难啊.今天重新看一遍其他教学,还有书籍,做些笔记,记录下每天的学习生活. File类的一些方法 ...

  5. java.io.File类操作

    一.java.io.File类 String path="E:/222/aaa";//路径 String path1="aaa.txt"; File file= ...

  6. java中File类的使用

    public class FileLei {    public static void main(String[] args) throws IOException {        //..表示上 ...

  7. java.io.File类

    java.io.File类 1.凡是与输入.输出相关的类.接口等都定义在java.io包下 2.File是一个类.能够有构造器创建其对象.此对象相应着一个文件(.txt .avi .doc .ppt ...

  8. Java之File类

    一.初见File类 java.io.File类代表系统中的文件(文件或目录) 常用构造方法 File(String pathname) File(String parent, String child ...

  9. JAVA基础-File类

    一.File类概述 File类是文件和目录路径名的抽象表示形式.File类可以理解为一个文件路径或者文件夹路径的JAVA表现形式,而路径又可以分为绝对路径(是一个固定路径,从盘符开始),相对路径(相对 ...

随机推荐

  1. Zookeeper简介与安装

    Zookeeper:A Distributed Coordination Service for Distributed Applications. 一.Zookeeper简介 众所周知,协同服务是分 ...

  2. AWS RDS 使用笔记

    创建VPC安全组 添加VPC子网 创建RDS子网组 创建RDS参数组 创建MySQL实例 查看RDS终端节点 使用 MySQL 监视器与数据库实例上的数据库连接 安装mysql client $ su ...

  3. Oracle SQL 基础学习

    oracel sql 基础学习 CREATE TABLE USERINFO ( ID ,) PRIMARY KEY, USERNAME ), USERPWD ), EMAIL ), REDATE DA ...

  4. Office 365 for TechNet 版本国家地区没有中国选项

    TechNet订阅用户提供一个Office365的注册,今天想测试一下,结果发现TechNet版本的没有中文地区选项 以下是官网E3使用账号注册,有中国地区 以下为TechNet订阅的office36 ...

  5. JavaScript之数据类型

    1. 种类 5种基本类型:Number.String.Null.Undefined.Boolean 1种对象类型:Object(Function.Array.Date) 特别注意:当把基本类型尝试以对 ...

  6. Object-C Dealloc

    上一篇为Object-C Init dealloc方法在一个对象从内存中删除时被调用.通常在这个方法里面释放所有对象里的实例变量 -(void)dealloc { [super dealloc]; [ ...

  7. 0基础学习ios开发笔记第二天

    C语言的基本结构 c语言的入口函数是main函数. main函数的返回值行业标准是int return 数字:返回值 每条语句最后以分号结尾 注释:行注释.块注释 int main(void) { / ...

  8. ios专题 -block用法

    what is block Blocks are a language-level feature added to C, Objective-C and C++, which allow you t ...

  9. javascript 去除字符串中重复字符

    /** * 去除字符串中重复的字符,以下提供2种方法, * removeRepeat()为自己所想: * removeRepeat2()参考网上思路补充的 * removeRepeat3()敬请期待· ...

  10. 下载youku视频(python3)

    https://github.com/chenfengyuan/download-youku-video 用tornado写的下载脚本, 从flvcd.com得到下载地址. 因为我这边连youku的速 ...