正如其他答案所指出的,使用File.createTempFile()创build的临时文件不会自动删除,除非您明确地请求它。

通用的可移植方法是在File对象上调用.deleteOnExit() ,当JVM终止时它将调度文件以进行删除。 然而,这种方法的一个小缺点是只有在VM正常终止的情况下才有效。 在exception终止(即虚拟机崩溃或强制终止虚拟机进程)时,该文件可能会保持未删除状态。

在UNIX系统(如Linux)上,实际上可以通过在打开临时文件后立即删除临时文件来获得更可靠的解决scheme。 这是有效的,因为Unix文件系统允许一个文件在被一个或多个进程保持打开的状态下被删除(不连接 ,准确地说)。 这些文件可以通过打开的文件句柄正常访问,并且在最后一个进程持有文件的打开句柄退出之后,它们只占用磁盘空间。

所以这里是我所知道的最可靠和便携的方式,以确保在程序退出后临时文件将被正确删除:

import java.io.File; import java.io.RandomAccessFile; import java.io.IOException; public class TempFileTest { public static void main(String[] args) { try { // create a temp file File temp = File.createTempFile("tempfiletest", ".tmp"); String path = temp.getAbsolutePath(); System.err.println("Temp file created: " + path); // open a handle to it RandomAccessFile fh = new RandomAccessFile (temp, "rw"); System.err.println("Temp file opened for random access."); // try to delete the file immediately boolean deleted = false; try { deleted = temp.delete(); } catch (SecurityException e) { // ignore } // else delete the file when the program ends if (deleted) { System.err.println("Temp file deleted."); } else { temp.deleteOnExit(); System.err.println("Temp file scheduled for deletion."); } try { // test writing data to the file String str = "A quick brown fox jumps over the lazy dog."; fh.writeUTF(str); System.err.println("Wrote: " + str); // test reading the data back from the file fh.seek(0); String out = fh.readUTF(); System.err.println("Read: " + out); } finally { // close the file fh.close(); System.err.println("Temp file closed."); } } catch (IOException e) { e.printStackTrace(); } } }

在Unixish系统上,运行这个应该会产生如下的输出:

Temp file created: /tmp/tempfiletest587200103465311579.tmp Temp file opened for random access. Temp file deleted. Wrote: A quick brown fox jumps over the lazy dog. Read: A quick brown fox jumps over the lazy dog. Temp file closed.

而在Windows上,输出看起来略有不同:

Temp file created: C:\DOCUME~1\User\LOCALS~1\Temp\tempfiletest5547070005699628548.tmp Temp file opened for random access. Temp file scheduled for deletion. Wrote: A quick brown fox jumps over the lazy dog. Read: A quick brown fox jumps over the lazy dog. Temp file closed.

不pipe怎样,在程序结束之后,临时文件不应该保留在磁盘上。

PS。 在Windows上testing这个代码的时候,我观察到了一个相当令人惊讶的事实:显然,仅仅让temp文件closures就足以使它不被删除 。 当然,这也意味着在临时文件被使用时发生的任何崩溃都将导致它被取消删除,这正是我们在这里要避免的 。

AFAIK,避免这种情况的唯一方法是确保临时文件总是使用finally块closures。 当然,那么你也可以在finally块中删除文件。 我不确定使用.deleteOnExit()什么,如果有的话,实际上会让你获益。

java 临时文件 删除_Java临时文件何时被删除?相关推荐

  1. java临时文件下载_Java临时文件

    java临时文件下载 java.io.File class can be used to create temp file in java. Sometimes we need to create t ...

  2. java 批量删除_java根据id批量删除

    1.mapper.xml 传入的参数可以是List也可以是Array数组,ParameterType都写List就可以collection="array"也可以写成collecti ...

  3. java 遍历list并删除_Java遍历List并删除某些元素

    Java遍历List并删除某些元素 ​在阿里的Java编程规约中有一条:[强制]不要在foreach循环里进行元素的remove/add操作.remove元素请使用Iterator方式,如果并发操作, ...

  4. java iterator 删除_Java集合使用 Iterator 删除元素

    这篇文章主要介绍了Java集合使用 Iterator 删除元素,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 针对常见的数据集合,比如 ArrayL ...

  5. php au著h权限管理,Jirafeau:一个简洁的临时文件分享系统,可随时删除

    Jirafeau:一个简洁的临时文件分享系统,可随时删除 球球 • 2021 年 Mar 月 Tue 日 说明:之前介绍过一个临时文件系统Plik→点击查看,功能比较强大,不过对于不会美化界面的人来说 ...

  6. Python删除Delphi临时文件的小脚本

    Delphi在编译过程中会产生很多临时文件,写了个Python脚本,用于删除这些临时文件. 上代码: #------------------------------------------------ ...

  7. 服务器临时文件删除bat,bat 命令删除系统临时文件夹的内容

    用批处理文件来删除临时文件 方法1 首先,新建一个记事本文件.再双击打开记事本,在其中输入以下代码 @echo off echo 正在清除系统垃圾文件,请稍等...... echo programme ...

  8. 浏览器html5临时文件,如何完全删除Internet临时文件

    缓存数据和临时Internet文件会占用大量存储空间,用户应该定期删除临时Internet文件.此外,这些文件可以包含缓存数据和Cookie,可用于跟踪用户在网络上的活动.为了确保隐私不被侵犯,用户应 ...

  9. java pdf 书签_Java PDF书签——添加、编辑、删除、读取书签

    本文介绍通过Java程序来操作PDF书签,根据对书签的不同操作要求,分以下情况来介绍: 1. 添加书签(包括添加一级书签.多级子书签) 3. 删除书签(包括删除所有书签.删除子书签等) 4. 读取书签 ...

  10. java创建临时文件夹_java创建临时文件

    [java]代码库/** * 创建临时文件 * * @param prefix * 临时文件名的前缀 * @param suffix * 临时文件名的后缀 * @param dirName * 临时文 ...

最新文章

  1. 小程序仿安卓动画滑动效果滑动动画效果实现
  2. hbctraining-05_peak_calling_macs2
  3. 2011软件设计大赛
  4. mc网站服务器设置家怎么圈地,《我的世界》怎么圈地 设置方法教程
  5. NodeJS Stream 五:双工流
  6. 优雅的断开连接--shutdown()
  7. 怎么实现多用户同时远程连接到一台电脑上
  8. 【网络教程】Windows字体发虚,字体不清晰怎么办?
  9. armv6、armv7、armv7s、armv8、armv64及其i386、x86_64区别
  10. ps2021没法用神经元滤镜,ps2021神经滤镜不能下载
  11. wps表格宏被禁用如何解禁_宏被禁用怎么办?excel/word宏已被禁用解决方法
  12. matlab中欧姆怎么表示,电阻的单位为欧姆,用符号()表示。 - 问答库
  13. win7在网上邻居上看不到别的电脑如何解决
  14. 笔记本电脑设置自动关机以及取消自动关机
  15. python之selenium和xpath简单知晓国服魔兽世界正式服人口普查
  16. 全球水深地形模型ETOPO1
  17. c语言驱动显卡,佳能 Tesla C2050 驱动程序下载-更新佳能软件(显卡)
  18. 【java框架】Maven是干什么的?
  19. python常用小脚本总结
  20. FofaMap云查询版

热门文章

  1. 佳能g3800打印机黄灯和绿灯交替闪是什么情况?
  2. 微信小程序开发流程、开发者工具下载安装
  3. 记工软件 包工头记工软件 建筑记工软件 工程记工软件
  4. SQL 从入门到精通
  5. java7下载64位下载_JRE7 64位(java运行环境)下载|JRE7 64位(java运行环境)官方下载-太平洋下载中心...
  6. MFC开发wps演示
  7. xshell7,xftp7个人免费版官方下载,无需破解,免激活,下载即可使用
  8. Abaqus运行fortan报错:“Error in job Job-1: Problem during compilation - D:\test.for”
  9. javase转javaee(java web)
  10. 最简单的凯撒密码(C++)