Java IO 建立檔案解決檔名重複問題

言曌發表於2018-03-17

之前在做上傳的時候,檔案命名都是按照時間毫秒數來命名的,如 2017120110344155.jpg 這種的

Java IO 建立檔案解決檔名重複問題

其實這種雖然能解決問題,但是我個人不是很喜歡。

我更希望是如果檔名不存在不修改檔名,如果存在在檔名後面加數字,1,2,3這種的。

像這樣

Java IO 建立檔案解決檔名重複問題

 

程式碼演示

下面通過一個拷貝檔案的例子完成這個想法

  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

相關文章