先举几个能够删除掉文件和删除不掉文件的例子(先在F盘建立test1.txt文件,而后能够直接拷贝代码到IDE执行),最后总结下缘由:java
例子一:下面的例子毫无疑问是可以删除掉文件的程序员
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(); } }
缘由:一个进程内(或者线程)单个线程执行,不存在资源共享的问题,因此能够删除。spa
例子二:下面的例子会删除成功,可是后面会报找不到文件的异常线程
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方法已经把文件删除了,因此会报找不到系统文件的异常。接着看下面的例子。code
例子三:下面的例子会删除失败,缘由是InputStream正在使用file,IO流尚未关闭blog
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方法删除文件,能够和例子三对比下不一样之处就明白了。get
接下来总结File的delete方法须要注意的一些地方:input
1. 若是要删除的文件正在被占用,文件会删不掉,例如别的程序还在对文件进行读取操做,没来得及释放文件,后边的程序就试图删除该文件,会致使删除失败。
2. 使用IO操做文件的过程当中要记得关闭流,这是作程序员的最基本素质。