文件无法删除java.io.IOException: Unable to delete

疑问:1.为什么调用file.delete()方法时,返回值为false.

   2.为什么调用Guava工具jar包中的Files.move(from,to) ,报异常:java.io.IOException: Unable to delete

执行代码程序前需要创建一个test.txt文件。

上代码:

package indi.johnny.test007;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class Demo {

    public static void main(String[] args) {
        try {
            File file = new File("C:/Users/johnny/Desktop/test.txt");

            if(file.exists()){
                InputStream inputStream = new FileInputStream(file);
                //inputStream.close();
                boolean flag = file.delete();
                System.out.println(flag);
            }
        } catch (Exception e) {
            System.out.println(e);
        }

    }

}

执行以上代码会打印出 "false",也就是说删除文件失败。

但是将上述代码中的注释行"inputStream.close();"打开,则打印出"true",删除文件成功。

结论:通过文件加载的数据流InputStream,若未关闭,则文件无法删除。

Guava中的Files.move(from,to)方法有调用file.delete()方法,所以当inputStream未执行close()方法时,会报异常"Unable to delete"。

以下为Guava中Files.move(from,to)方法内容:

public static void move(File from, File to)
/*     */     throws IOException
/*     */   {
/* 494 */     Preconditions.checkNotNull(from);
/* 495 */     Preconditions.checkNotNull(to);
/* 496 */     Preconditions.checkArgument(!from.equals(to), "Source %s and destination %s must be different", new Object[] { from, to });
/*     */
/*     */
/* 499 */     if (!from.renameTo(to)) {
/* 500 */       copy(from, to);
/* 501 */       if (!from.delete()) {
/* 502 */         if (!to.delete()) {
/* 503 */           throw new IOException("Unable to delete " + to);
/*     */         }
/* 505 */         throw new IOException("Unable to delete " + from);
/*     */       }
/*     */     }
/*     */   }
时间: 2024-10-10 00:56:45

文件无法删除java.io.IOException: Unable to delete的相关文章

hbase异常:java.io.IOException: Unable to determine ZooKeeper ensemble

项目中用到hbase,有时候可能会报一些异常,比如java.io.IOException: Unable to determine ZooKeeper ensemble 等等,当出现这个问题时,某某说是项目中用到线程池的问题导致的,但查看异常之后,并非跟啥线程池有关系,异常信息如下: java.io.IOException: Unable to determine ZooKeeper ensemble at org.apache.hadoop.hbase.zookeeper.ZKUtil.con

java io IOException Unable to establish loopback connection

1.错误描述 Starting preview server on port 8080 Modules: HTML5 (/HTML5) 2017-06-17 11:13:04.823:INFO::main: Logging initialized @524ms 2017-06-17 11:13:05.017:INFO:oejs.Server:main: jetty-9.3.9.v20160517 java.io.IOException: Unable to establish loopback

pycharm下修改项目名称或者删除项目时:弹窗报提示java.io.IOException: Couldn't delete

主要原因是项目中selenium用到的chromedriver插件没有完全关闭(没有输入正确的开启/关闭chromedriver代码). 电脑的进程中残留了很多的chromedriver.exe进程,而项目本身与这些进程关联着所以不能修改或删除. 解决办法: 打开任务管理器,在进程下搜索chromedriver.exe进程,结束这个进程后,在pycharm下可以删除想删除的文件了. pycharm下修改项目名称或者删除项目时:弹窗报提示java.io.IOException: Couldn't

SpringBoot 上传文件突然报错 Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.1428942566812653608

异常信息 org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.1428942566812653608.8090/work/Tomcat/localhost/ROOT] is not vali

【IE下载文件——后台报ClientAbortException:java.io.IOException错误】

一.场景 页面上提供下载Excel文件的功能,用于下载报表中的数据. 分别在chrome,IE中进行测试.在chrome中正常,在IE中后台报错. 二.错误信息 org.apache.catalina.connector.ClientAbortException: java.io.IOException    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:407)    at org.

java.io.ioexception failed to mkdirs jenkins xcode || jenkins 无法创建新文件

=========================================================== FATAL: Failed to mkdirs: /Users/chenqing/Sqy/iOSProject/cyou/Svn/Cos/CosXCode_lxh/test-reports java.io.IOException: Failed to mkdirs: /Users/chenqing/Sqy/iOSProject/cyou/Svn/Cos/CosXCode_lxh

hive对于lzo文件处理异常Caused by: java.io.IOException: Compressed length 842086665 exceeds max block size 67108864 (probably corrupt file)

hive查询lzo数据格式文件的表时,抛 Caused by: java.io.IOException: Compressed length 842086665 exceeds max block size 67108864 (probably corrupt file) 这类异常,如图: 这是由于lzo文件数过多,hive执行时默认是不会自动先合并lzo等压缩文件再计算,需要设置hive对应的参数,告诉它在执行计算之前,先合并较多的压缩文件 在执行hive的sql之前需要加上 set hive

java.io.IOException: java.io.FileNotFoundException: /tmp/tomcat.2457258178644046891.8080/work/Tomcat/localhost/innovate-admin/C:/up/154884318438733213952/sys-error.log (没有那个文件或目录)

环境: Ubuntu18 vue+elementUI 实现文件的上传 报错信息: java.io.IOException: java.io.FileNotFoundException: /tmp/tomcat.2457258178644046891.8080/work/Tomcat/localhost/innovate-admin/C:/up/154884318438733213952/sys-error.log (没有那个文件或目录) at org.apache.catalina.core.A

Jenkins报错Caused: java.io.IOException: Cannot run program "sh" (in directory "D:\Jenkins\Jenkins_home\workspace\jmeter_test"): CreateProcess error=2, 系统找不到指定的文件。

想在本地执行我的python文件,我本地搭建了一个Jenkins,使用了execute shell来运行我的脚本,发现报错 [jmeter_test] $ sh -xe D:\tomcat\apache-tomcat-8.5.20\temp\jenkins4583980269774421650.sh The system cannot find the file specified FATAL: command execution failed java.io.IOException: Crea