>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 28860 个阅读者 刷新本主题
 * 贴子主题:  用Java优雅地处理临时文件的方法 回复文章 点赞(0)  收藏  
作者:Jacky    发表时间:2019-06-28 20:08:15     消息  查看  搜索  好友  邮件  复制  引用

一、背景
最近接手了同事的代码,发现他是这样处理excel文件的:

1、将文件保存到一个事先定义好的目录;如果目录不存在则新建

2、使用excel处理工具根据文件路径读取文件内容之后处理业务逻辑

3、编写一个定时任务每天凌晨1点删除该目录内的.xlsx文件复制代码

这样虽然可以达到效果,但实在是繁琐至极,非常不优雅。其实jdk中就提供了处理临时文件(Temporary File)的方法,现在让我们来看一看。

二、创建临时文件
在java中创建临时文件有许多场景,但是大多数是在单元测试或者是对上传的文件进行内容处理。当测试用例或者文件处理完成后,你并不关心文件是否还存在。况且持续累积的无效文件无疑会浪费许多磁盘空间。

1、通过使用java.io.File.createTempFile()创建临时文件

public classTemporaryFileExample{publicstaticvoidmain(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

2、通过使用NIO创建临时文件

publicclassTemporaryFileExample{publicstaticvoidmain(String[] args){

try{

finalPath 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

三、写入临时文件
比如在文件上传的时候,我们就可以将字节流写入临时文件当中。

1、使用java.io.BufferedWriter写入临时文件

importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;publicclassTemporaryFileExample{

publicstaticvoidmain(String[] args){    

File temp;try{      

temp = File.createTempFile("myTempFile",".txt");        

BufferedWriter bw =newBufferedWriter(newFileWriter(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();      }

}

}

2、使用NIO写入临时文件

如果你要使用java NIO库,你就可以使用Files.write()方法

publicclassTemporaryFileExample{

publicstaticvoidmain(String[] args){

try{

finalPath 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();

1、使用IO删除临时文件

importjava.io.File;importjava.io.IOException;publicclassTemporaryFileExample{publicstaticvoidmain(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();  

   }

}

}

2、使用NIO删除临时文件

publicclassTemporaryFileExample{

publicstaticvoidmain(String[] args){

try{

finalPath path = Files.createTempFile("myTempFile",".txt");      

System.out.println("Temp file : "+ path);

// Files.delete(path);

//立即删除文件Files.deleteIfExists(path);                                

}catch(IOException e)      {      

  e.printStackTrace();    

}  

}

}

转自:https://blog.51cto.com/14378044/2414846


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->Java常用类(下)
  JavaWeb开发-->Servlet技术详解(Ⅲ)
  JSP与Hibernate开发-->立即检索和延迟检索策略
  Java网络编程-->用Swing组件展示HTML文档
  精通Spring-->Vue CLI脚手架工具
  Vue3开发-->组合(Composition)API
  求素数
  JDK17的新特性
  Java虚拟机进行类连接的原理
  Java集合框架学习---深入探究ArrayList源码
  Java设计模式:接口隔离原则和迪米特法则详解
  Java中保留数字的若干位小数位数的方法
  Java关键字final、static使用总结
  Java的对象的拷贝方式集合
  Java是如何实现自己的SPI机制的?
  害怕面试被问HashMap?
  正则表达式:运算符优先级
  正则表达式基础入门
  Java 入门实用代码:取最大和最小值
  Java入门实用代码:查找字符串最后一次出现的位置
  Java中的main()方法详解
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。