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

Java

1

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

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

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

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

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

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

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

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

Java

1

// C:UsersAnghelAppDataLocalTemp8083202661590940905

2

Path tmpNoPrefix = Files.createTempDirectory(null);

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

Java

1

// C:UsersAnghelAppDataLocalTemplogs_5825861687219258744

2

String customDirPrefix = "logs_";

3

Path tmpCustomPrefix = Files.createTempDirectory(customDirPrefix);

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

Java

1

// D:tmplogs_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:UsersAnghelAppDataLocalTemp16106384687161465188.tmp

2

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

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

Java

1

// C:UsersAnghelAppDataLocalTemplog_402507375350226.txt

2

String customFilePrefix = "log_";

3

String customFileSuffix = ".txt";

4

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

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

Java

1

// D:tmplog_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<Path> 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<Path> 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的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。

idea中java文件怎么运行_在Java中使用临时文件/文件夹相关推荐

  1. java applet怎么运行_配置Java Applet的运行环境

    Java小程序,也就是Java Applet,可以在Web浏览器中运行.Java Applet必须以脚本的形式嵌入到HTML页面中,才能在web浏览器中运行. 之前总以为本地安装了JDK,指定好JAV ...

  2. 如何把一个java程序打包成exe文件,运行在没有java虚

    如何把一个java程序打包成exe文件,运行在没有java虚 核心提示:首先,将编译好的程序打包成jar文件,然后做出exe,这样代码就不可见了:但是exe文件在没有安装jre的电脑上不能运行,如果要 ...

  3. java.lang.IllegalArgumentException: 字符[_]在域名中永远无效。 at

    [http-nio-8080-exec-1] org.apache.coyote.AbstractProcessor.parseHost [xxx_tomcat] 是无效主机注意:更多的请求解析错误将 ...

  4. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  5. java中获取文件总行数_关于java:如何以有效的方式获取文件中的行数?

    本问题已经有最佳答案,请猛点这里访问. 我有一个大文件. 它包括大约3.000-20.000行. 如何使用Java获取文件中的行总数? 从你的评论到答案来判断,你要找的词是"有效的" ...

  6. java class文件常量池_《Java虚拟机原理图解》 1.2.3、Class文件中的常量池详解(下)...

    Java内存区域         1.程序计数器(Program Counter Register)(线程私有的)         2.Java虚拟机栈 (Java Virtual Machine S ...

  7. java 8 中文字体_在java程序中直接使用中文字体文件

    在java程序中直接使用中文字体文件.代码中的hb.ttf文件请用你自己的中文字体文件代替 java学习 java培训 软件工程师 如何学习java 学习java哪里好 东方清软java培训 清软国际 ...

  8. 内存映射文件 写入 卡住_在Java中使用内存映射文件时检测(写入)失败

    内存映射文件 写入 卡住 内存映射文件是一个很好的并且经常被忽视的工具. 我不会在这里详细介绍它们的工作方式(使用 力 Google Luke!),但我将快速总结其优势: 操作系统提供的延迟加载和写入 ...

  9. fileoutputstream 文件不存在_总结Java中创建并写文件的5种方式

    在Java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面小编就帮大家总结一下Java中创建文件的五种方法. 在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者 ...

最新文章

  1. 去除源文件中的重复行的程序流程及其C代码实现
  2. python 批量下载网址_python 遍历oss 实现批量下载
  3. 用python的turtle画圆-(python海龟绘图怎么增加每次画圆的半径)
  4. git commit -amend_Github标星3W+,这份Git飞行规则你值得拥有
  5. vue 订单支付15分钟倒计时
  6. 云栖大会极客智造局亮点抢先看
  7. linux 后端的进程,linux后台启动进程
  8. python是动态语言
  9. SQL 取空格右边的字符_从零学会SQL,第2关
  10. P-NUCLEO-IHM001 板载STLINK 驱动安装
  11. 【软件测试基础理论知识】1.1.常见的软件开发模型之———瀑布模型、原型模型、快速原型模型
  12. 分体式水晶头_桌面运维小知识--六类水晶头的接线方法(分体式安装图解)
  13. 麦吉尔商业与计算机科学,麦吉尔大学与UBC大学那个好考
  14. matlab中内插cubic,cubic与spline插值点处的区别
  15. 变分推断(variational inference)学习笔记(1)——概念介绍
  16. 传递函数化为状态空间表达式
  17. 学拳录 23退步压肘
  18. AI绘图网站 MJ(Midjourney) 基础讲解+注册教程
  19. 第二章 Google 常用功能
  20. PAT B1032. 挖掘机技术哪家强 (20)

热门文章

  1. phpmailer 私密抄送_PHP电子邮件发送密件抄送
  2. mac系统钥匙串说明
  3. adc0804模数转换实验报告_51单片机ADC0804模数转换学习
  4. 微信小程序-侧边栏-获取用户选中的值
  5. matplotlib 画图之坐标轴不等距
  6. win7运行java配色方案_win7玩穿越火线桌面提示“配色方案已更改为windows 7 basic如何解决...
  7. 响铃:秒拍掘金垂直化内容,到底是不是个好主意?
  8. 虚拟机centos7繁忙关不了机的解决方法
  9. WDA学习(21):WDA Popup,Message,Focus
  10. 新冠判断软件(仅供娱乐)