Java NIO.2 API提供了对使用临时文件夹/文件的支持。例如,我们可以轻松地找到临时文件夹/文件的默认位置,如下所示:

Java

1

String defaultBaseDir = System.getProperty("java.io.tmpdir");

通常,在Windows中,默认的临时文件夹为 C:\Temp , %Windows%\Temp 或每个用户所在的临时目录 Local Settings\Temp (此位置通常由TEMP 环境变量控制 )。

在Linux / Unix中,全局临时目录为 /tmp 和 /var/tmp 。前一行代码将返回默认位置,具体取决于操作系统。接下来,我们将学习如何创建一个临时文件夹/文件。

创建一个临时文件夹/文件

创建临时文件夹可以使用以下方法完成:

· Path createTempDirectory (Path dir, String prefix, FileAttribute>... attrs)

这是类中的一种 static方法 Files ,可以按如下方式使用:

· 让我们在操作系统的默认位置创建一个没有前缀的临时文件夹:

Java

1

// C:\Users\Anghel\AppData\Local\Temp\8083202661590940905

2

Path tmpNoPrefix = Files.createTempDirectory(null);

让我们在操作系统的默认位置创建一个带有自定义前缀的临时文件夹:

Java

1

// C:\Users\Anghel\AppData\Local\Temp\logs_5825861687219258744

2

String customDirPrefix = "logs_";

3

Path tmpCustomPrefix = Files.createTempDirectory(customDirPrefix);

让我们在带有自定义前缀的自定义位置中创建一个临时文件夹:

Java

1

// D:\tmp\logs_10153083118282372419

2

Path customBaseDir = FileSystems.getDefault().getPath("D:/tmp");

3

String customDirPrefix = "logs_";

4

Path tmpCustomLocationAndPrefix = Files.createTempDirectory(customBaseDir, customDirPrefix);

创建临时文件可以通过以下方式完成:

· Path createTempFile (Path dir, String prefix, String suffix, FileAttribute>... attrs

这是类中的一种static方法Files ,可以按如下方式使用:

· 让我们在操作系统的默认位置创建一个没有前缀和后缀的临时文件:

Java

1

// C:\Users\Anghel\AppData\Local\Temp\16106384687161465188.tmp

2

Path tmpNoPrefixSuffix = Files.createTempFile(null, null);

让我们在操作系统的默认位置创建一个带有自定义前缀和后缀的临时文件:

Java

1

// C:\Users\Anghel\AppData\Local\Temp\log_402507375350226.txt

2

String customFilePrefix = "log_";

3

String customFileSuffix = ".txt";

4

Path tmpCustomPrefixAndSuffix = Files.createTempFile(customFilePrefix, customFileSuffix);

让我们在带有自定义前缀和后缀的自定义位置中创建一个临时文件:

Java

1

// D:\tmp\log_13299365648984256372.txt

2

Path customBaseDir = FileSystems.getDefault().getPath("D:/tmp");

3

String customFilePrefix = "log_";

4

String customFileSuffix = ".txt";

5

Path tmpCustomLocationPrefixSuffix

6

= Files.createTempFile(customBaseDir, customFilePrefix, customFileSuffix);

接下来,我们将研究删除临时文件夹/文件的不同方法。

通过关机挂钩删除临时文件夹/文件

删除临时文件夹/文件是可以由操作系统或专用工具完成的任务。但是,有时,我们需要以编程方式进行控制,并基于不同的设计考虑因素删除文件夹/文件。

该问题的解决方案依赖于可通过该方法实现的关机挂钩机制 Runtime.getRuntime().addShutdownHook() 。每当我们需要在JVM关闭之前立即完成某些任务(例如,清理任务)时,此机制就很有用。它作为Java线程实现,run() 当JVM在关闭时执行shutdown-hook时,将调用其 方法。如下代码所示:

Java

1

Path customBaseDir = FileSystems.getDefault().getPath("D:/tmp");

2

String customDirPrefix = "logs_";

3

String customFilePrefix = "log_";

4

String customFileSuffix = ".txt";

5

6

try {

7

Path tmpDir = Files.createTempDirectory(customBaseDir, customDirPrefix);

8

Path tmpFile1 = Files.createTempFile(tmpDir, customFilePrefix, customFileSuffix);

9

Path tmpFile2 = Files.createTempFile(tmpDir, customFilePrefix, customFileSuffix);

10

11

Runtime.getRuntime().addShutdownHook(new Thread() {

12

13

@Override

14

public void run() {

15

try (DirectoryStream ds = Files.newDirectoryStream(tmpDir)) {

16

for (Path file: ds) {

17

Files.delete(file);

18

}

19

20

Files.delete(tmpDir);

21

} catch (IOException e) {

22

...

23

}

24

}

25

});

26

27

//simulate some operations with temp file until delete it

28

Thread.sleep(10000);

29

} catch (IOException | InterruptedException e) {

30

...

31

}

通过deleteOnExit()删除临时文件夹/文件

删除临时文件夹/文件的另一种解决方案依赖于该 File.deleteOnExit()方法。通过调用此方法,我们可以注册删除文件夹/文件。JVM关闭时,将执行删除操作:

Java

1

Path customBaseDir = FileSystems.getDefault().getPath("D:/tmp");

2

String customDirPrefix = "logs_";

3

String customFilePrefix = "log_";

4

String customFileSuffix = ".txt";

5

6

try {

7

Path tmpDir = Files.createTempDirectory(customBaseDir, customDirPrefix);

8

System.out.println("Created temp folder as: " + tmpDir);

9

Path tmpFile1 = Files.createTempFile(tmpDir, customFilePrefix, customFileSuffix);

10

Path tmpFile2 = Files.createTempFile(tmpDir, customFilePrefix, customFileSuffix);

11

12

try (DirectoryStream ds = Files.newDirectoryStream(tmpDir)) {

13

tmpDir.toFile().deleteOnExit();

14

15

for (Path file: ds) {

16

file.toFile().deleteOnExit();

17

}

18

} catch (IOException e) {

19

...

20

}

21

22

// simulate some operations with temp file until delete it

23

Thread.sleep(10000);

24

} catch (IOException | InterruptedException e) {

25

...

26

}

通过DELETE_ON_CLOSE删除临时文件

删除临时文件所依赖的另一个解决方案 StandardOpenOption.DELETE_ON_CLOSE (在关闭流时删除该文件)。例如,下面的代码段通过createTempFile() 方法创建一个临时文件,并为该文件打开一个DELETE_ON_CLOSE 显式指定的缓冲写流:

Java

1

Path customBaseDir = FileSystems.getDefault().getPath("D:/tmp");

2

String customFilePrefix = "log_";

3

String customFileSuffix = ".txt";

4

Path tmpFile = null;

5

6

try {

7

tmpFile = Files.createTempFile(

8

customBaseDir, customFilePrefix, customFileSuffix);

9

} catch (IOException e) {

10

...

11

}

12

13

try (BufferedWriter bw = Files.newBufferedWriter(tmpFile,

14

StandardCharsets.UTF_8, StandardOpenOption.DELETE_ON_CLOSE)) {

15

16

//simulate some operations with temp file until delete it

17

Thread.sleep(10000);

18

} catch (IOException | InterruptedException e) {

19

...

20

}

最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。

java 临时文件_在Java中使用临时文件/文件夹相关推荐

  1. java递归删除文件夹_如何使用递归删除Java中的目录/文件夹

    java递归删除文件夹 Earlier we learned how to create a file in java and how to delete a file in java. Here w ...

  2. java 空文件夹删除_删除Java中的空文件夹,处理隐藏文件

    我想删除java中的空文件夹,这里是我的代码: try (DirectoryStream stream = Files.newDirectoryStream(path)) { for (Path fi ...

  3. Java中 实现通过文件夹选择任一图像,从而进行图像卷积操作

    ** Java中 实现通过文件夹选择任一图像,从而进行图像卷积操作 ** 之前的那篇关于图像卷积的博客(Java中实现图像的卷积效果),只是讲了给定一张图片,从而实现图片的卷积操作:而现在,需要去实现 ...

  4. Java中如何读取文件夹下的所有文件

    问题:Java中如何读取文件夹下的所有文件 Java里面是如何读取一个文件夹下的所有文件的? 回答一 public void listFilesForFolder(final File folder) ...

  5. java web项目的目录结构以及各文件夹的功能是什么eclipse的web目录及各作用

    创建一个javaweb项目的大致目录结构就是这样的,因为是第一次新建,我们的目录只包含了一些基础的文件夹. 然后我们看一下他们的功能是什么. test:项目名称(也可以是其他名称,尽量和自己创建的项目 ...

  6. java Mail imap协议获取到得邮件文件夹名称

    java Mail imap协议获取到得邮件文件夹名称 Imap协议 QQ imap.qq.com 端口:143 获取得邮件 Folder[] list 中 1.其他文件夹 2.INBOX 3.Sen ...

  7. Java抓取起点小说输出到本地文件夹和数据库

    Java抓取起点小说输出到本地文件夹和数据库 目录 项目结构 所需插件 项目代码 输出结果 目录 项目结构 第一次写网络爬虫,参考了别人的,也自己理解了用法 所需插件 因为使用了mevan,直接上po ...

  8. .vue文件_在idea中创建vue文件

    如何让idea支持.vue文件_WinterBluestar的博客-CSDN博客_idea中怎么样.vue文件夹​blog.csdn.net

  9. python移动文件中某个内容_如果python中的某些文件类型,则移动文件并创建目录...

    这可能是一个简单的问题,但我对 python和编程一般都是新手. 我正在研究一个简单的程序,在镜像源位置的目录结构时,将.mp3文件从一个位置复制/移动到另一个位置.到目前为止我的工作,但它也在目标位 ...

  10. attrib批量显示文件夹_电脑中病毒,文件夹全部变成快捷方式?3种方法轻松解决!...

    原标题:电脑中病毒,文件夹全部变成快捷方式?3种方法轻松解决! 最近有位朋友去打印店的时候,u盘一不小心就带回了1KB快捷方式病毒,导致电脑u盘里的文件以及文件夹全部变成了快捷方式,不知道如何解决. ...

最新文章

  1. java强制转换成float_在Java中什么时候double必须强制转换成float 就是要在数值后加f或者强制转换...
  2. educoder python入门之基础语法答案-Educoder Python入门之经典函数实例
  3. 使用beanUtils操纵bean的属性
  4. Linux Malloc分析-从用户空间到内核空间
  5. 玩具版VR盒子没玩够?小米正式开放高端VR头显的开发机申请
  6. 字节跳动又一款中重度游戏曝光,它要进军“漫改MMO”领域!
  7. 详解 二叉搜索树-----AVL树
  8. nacos启动_nacos微服务注册中心
  9. 博士考试考完了,庆祝一下
  10. TransD:通过动态映射矩阵嵌入(知识图谱嵌入)ACL 2015
  11. 计算机课外作业,东南大学微机课外作业
  12. (十八)其他数据库对象,视图,序列
  13. MySQL错误号码1862:your password has expired
  14. c#html转换pdf,[C#] 网页Html转PDF档(一行程式码解决)
  15. Vue项目:电商后台管理管理系统
  16. ViewPage2和Fragment以及Tablayout使用
  17. 获取安卓模拟器的型号(品牌)
  18. 华为鸿蒙系统支持旧机型,华为鸿蒙系统2.0来了! 华为鸿蒙2.0系统支持手机机型...
  19. Linux内核静态映射表建立过程分析
  20. 【愚公系列】2021年12月 Redis数据库-集群的搭建

热门文章

  1. 4816: [Sdoi2017]数字表格
  2. 佳联集萃(王开林著)
  3. 零点起飞学HTML+CSS (顼宇峰) PDF扫描版
  4. 什么是差模干扰和共模干扰?
  5. (附源码)php积极心理学交流网站 毕业设计 100623
  6. 农林牧渔行业S2B2C系统网站提升品牌知名度,提升盈利水平
  7. 计算机之父图灵获英女王赦免
  8. 计算机专业和机械自动化哪个好,自动化和机械设计制造及其自动化有哪些区别?选哪个好呢?...
  9. ArcGIS Pro功能模块简介
  10. 支持向量机(SVM)理解以及在sklearn库中的简单应用