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. idea中java文件怎么运行_在Java中使用临时文件/文件夹

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

  2. 在Java中使用临时文件/文件夹

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

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

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

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

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

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

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

  6. java project 部署_关于Java Project项目在Linux下部署步骤及注意事项

    出了某几点细小的差别,跟Windows的部署是完全一致的,具备通用性 首先,介绍一下部署步骤: 第一:安装jdk 第二:安装tomcat 第三:配置环境变量:在/etc/profile的最后追加: e ...

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

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

  8. java 发布应用_发布java应用程序的步骤

    一.使用命令行发布java应用程序 步骤: 1.打开命令行界面: 2.进入项目目录(class路径)[例如在eclipse中的bin文件夹下]. 3.压缩文件:命令为 jar  -cvf  des * ...

  9. java发布程序_发布java应用程序的步骤 | 学步园

    一.使用命令行发布java应用程序 步骤: 1.打开命令行界面: 2.进入项目目录(class路径)[例如在eclipse中的bin文件夹下]. 3.压缩文件:命令为 jar  -cvf  des * ...

  10. linux文件目录:Linux中各目录(文件夹)作用详解(持续更新)

    进入Linux系统,我们就是畅游在各种目录文件中,毕竟Linux是"文件系统",文件的存放就是在目录下面,那我们了解下"Linux中各目录(文件夹)作用详解"还 ...

最新文章

  1. 软工作业 5:词频统计——增强功能
  2. 蓝桥杯 【基础练习】 十六进制转八进制
  3. oracle 被另一用户锁定,Oracle报错记录被另外一个用户锁定的解决方案
  4. Packet Tracer 5.0建构CCNA实验攻略(3)——Cisco VTP
  5. unity3D打包发布Apk详细步骤
  6. 到底应该选择哪种Linux.NET的部署方式?
  7. 写一个函数返回参数二进制中 1 的个数
  8. 笔记:Matrix completion by Truncated Nuclear Norm Regularization
  9. SM12表条目冻结说明
  10. BugkuCTF-WEB题本地管理员
  11. Android逆向笔记-通过字符串定位跳转点
  12. jq js json 转字符串_JSON字符串转换成JSON对象的JS代码
  13. 漫谈TCP-AIMD/BBR的公平性以及buffer bloat
  14. 前端页面崩溃现象处理
  15. iOS 最新 APP提交上架流程~(打包 ipa)
  16. 神马笔记 版本1.8.0——删除笔记/文件夹·技术细节篇
  17. Linux的编程模型ILP32和LP64
  18. Html创建动画的基本过程,动画视频制作基本的流程
  19. 为什么rand()每次产生的随机数都一样
  20. 一个高质量的智能单元测试平台——iUnit

热门文章

  1. Windows 系统服务优化指南
  2. android 动态修改logo,关于app动态修改logo的问题
  3. php sphinx配置,sphinx的配置和管理
  4. stirling formula prove
  5. 解决Maven报错:Could not transfer artifact xxx
  6. 智能暖风机——1.硬件搭建
  7. C语言求绝对值的问题
  8. iPhone6 6p 7 7p屏幕适配,切图准则
  9. 数据分析实战(二) 基于美国人口adult数据集R语言分析实战
  10. 小白入门指南|zookeeper快速入门