Java IO 创建文件解决文件名重复问题

avatar 2017年12月2日11:54:06 评论 763 views

之前在做上传的时候,文件命名都是按照时间毫秒数来命名的,如 2017120110344155.jpg 这种的

其实这种虽然能解决问题,但是我个人不是很喜欢。

我更希望是如果文件名不存在不修改文件名,如果存在在文件名后面加数字,1,2,3这种的。

像这样

 

代码演示

下面通过一个拷贝文件的例子完成这个想法

  1. package practice.IO;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. /**
  7.  * @author 言曌
  8.  * @date 2017/12/2 上午10:59
  9.  */
  10. public class Demo {
  11.     /**
  12.      * 将 /Users/liuyanzhao/Desktop/spring.jpeg 文件
  13.      * 拷贝到
  14.      * /Users/liuyanzhao/Desktop/io/中
  15.      * 需要避免文件名重复覆盖的情况
  16.      */
  17.     public static void main(String args[]) throws IOException {
  18.         //源文件
  19.         File sourceFile = new File("/Users/liuyanzhao/Desktop/spring.jpeg");
  20.         //文件的完整名称,如spring.jpeg
  21.         String filename = sourceFile.getName();
  22.         //文件名,如spring
  23.         String name = filename.substring(0,filename.indexOf("."));
  24.         //文件后缀,如.jpeg
  25.         String suffix = filename.substring(filename.lastIndexOf("."));
  26.         //目标文件
  27.         File descFile = new File("/Users/liuyanzhao/Desktop/io"+File.separator+filename);
  28.         int i = 1;
  29.         //若文件存在重命名
  30.         while(descFile.exists()) {
  31.             String newFilename = name+"("+i+")"+suffix;
  32.             String parentPath = descFile.getParent();
  33.             descFile = new File(parentPath+ File.separator+newFilename);
  34.             i++;
  35.         }
  36.         descFile.createNewFile();  //新建文件
  37.         FileInputStream fin = new FileInputStream(sourceFile);
  38.         FileOutputStream fout = new FileOutputStream(descFile);
  39.         byte[] data = new byte[512];
  40.         int rs = -1;
  41.         while((rs=fin.read(data))>0) {
  42.             fout.write(data,0,rs);
  43.         }
  44.         fout.close();
  45.         fin.close();
  46.     }
  47. }

 

最终效果是如上图如果文件存在,重命名加(1),如果还存在加(2),...

 

本文地址:https://liuyanzhao.com/6861.html

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: