在Java当中如何优雅地处理临时文件
创建临时文件
在java中创建临时文件有许多场景,但是大多数是在单元测试或者是对上传的文件进行内容处理。当测试用例或者文件处理完成后,你并不关心文件是否还存在。况且持续累积的无效文件无疑会浪费许多磁盘空间。
通过使用java.io.File.createTempFile()创建临时文件
public class TemporaryFileExample { public static void main(String[] args) { File temp; try { temp = File.createTempFile("myTempFile", ".txt"); System.out.println("Temp file created : " + temp.getAbsolutePath()); } catch (IOException e) { e.printStackTrace(); } } }
windows系统中的输出: C:\Users\admin\AppData\Local\Temp\myTempFile7295261447112135643.txt
通过使用NIO创建临时文件
public class TemporaryFileExample { public static void main(String[] args) { try { final Path path = Files.createTempFile("myTempFile", ".txt"); System.out.println("Temp file : " + path); } catch (IOException e) { e.printStackTrace(); } } }
windows系统中的输出: C:\Users\admin\AppData\Local\Temp\myTempFile3492283537103788196.txt
写入临时文件
比如在文件上传的时候,我们就可以将字节流写入临时文件当中。
使用java.io.BufferedWriter写入临时文件
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; public class TemporaryFileExample { public static void main(String[] args) { File temp; try { temp = File.createTempFile("myTempFile", ".txt"); BufferedWriter bw = new BufferedWriter(new FileWriter(temp)); bw.write("This is the temporary data written to temp file"); bw.close(); System.out.println("Written to Temp file : " + temp.getAbsolutePath()); } catch (IOException e) { e.printStackTrace(); } } }
使用NIO写入临时文件
如果你要使用java NIO库,你就可以使用Files.write()方法
public class TemporaryFileExample { public static void main(String[] args) { try { final Path path = Files.createTempFile("myTempFile", ".txt"); System.out.println("Temp file : " + path); byte[] buf = "some data".getBytes(); Files.write(path, buf); } catch (IOException e) { e.printStackTrace(); } } }
删除临时文件
删除临时文件是非常重要的一步,因为你不想让你的磁盘空间爆炸。
为了当在应用exit时(jvm终止)删除文件,你可以使用:
File temp = File.createTempFile("myTempFile", ".txt");
temp.deleteOnExit();
或者如果你想要立马删除文件,你可以直接使用delete()
方法
File temp = File.createTempFile("myTempFile", ".txt");
temp.delete();
使用IO删除临时文件
import java.io.File; import java.io.IOException; public class TemporaryFileExample { public static void main(String[] args) { File temp; try { temp = File.createTempFile("myTempFile", ".txt"); System.out.println("Temp file created : " + temp.getAbsolutePath()); //temp.delete(); //立即删除 temp.deleteOnExit(); //运行结束时删除 System.out.println("Temp file exists : " + temp.exists()); } catch (IOException e) { e.printStackTrace(); } } }
使用NIO删除临时文件
public class TemporaryFileExample { public static void main(String[] args) { try { final Path path = Files.createTempFile("myTempFile", ".txt"); System.out.println("Temp file : " + path); // Files.delete(path); //立即删除文件 Files.deleteIfExists(path); } catch (IOException e) { e.printStackTrace(); } } }
但是在进行删除和创建文件的时候我使用的是hutool工具类中的fileUtil这个工具类
ls 列出目录和文件
touch 创建文件,如果父目录不存在也自动创建
mkdir 创建目录,会递归创建每层目录
del 删除文件或目录(递归删除,不判断是否为空),这个方法相当于Linux的delete命令
copy 拷贝文件或目录
需要注意的是,del方法会删除目录而不判断其是否为空,这一方面方便了使用,另一方面也可能造成一些预想不到的后果(比如拼写错路径而删除不应该删除的目录),所以请谨慎使用此方法。
本文来自博客园,作者:King-DA,转载请注明原文链接:https://www.cnblogs.com/qingmuchuanqi48/p/12405379.html