最近接手了同事的代码,发现他是这样处理excel文件的:
1. 将文件保存到一个事先定义好的目录;如果目录不存在则新建 2. 使用excel处理工具根据文件路径读取文件内容之后处理业务逻辑 3. 编写一个定时任务每天凌晨1点删除该目录内的.xlsx文件 复制代码
这样虽然可以达到效果,但实在是繁琐至极,非常不优雅。其实 jdk 中就提供了处理 临时文件 (Temporary File)的方法,现在让我们来看一看。
在java中创建临时文件有许多场景,但是大多数是在单元测试或者是对上传的文件进行内容处理。当测试用例或者文件处理完成后,你并不关心文件是否还存在。况且持续累积的无效文件无疑会浪费许多磁盘空间。
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
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
比如在文件上传的时候,我们就可以将字节流写入临时文件当中。
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(); } } } 复制代码
如果你要使用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(); 复制代码
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(); } } } 复制代码
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(); } } } 复制代码