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

avatar 2017年12月02日11:54:06 6 5211 views
博主分享免费Java教学视频,B站账号:Java刘哥 ,长期提供技术问题解决、项目定制:本站商品点此
之前在做上传的时候,文件命名都是按照时间毫秒数来命名的,如 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
  • 个人淘宝
  • 店铺名:言曌博客咨询部

  • (部分商品未及时上架淘宝)
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0