首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

如何批量將圖片移動到以文件名命名的獨立文件夾中(自動創建目錄)

     編輯:程式設計綜合問答

需求場景

有 100 張圖片(如 photo1.jpg、photo2.png...),需要為每張圖片創建一個同名文件夾(去除擴展名),並將圖片移動到對應文件夾中。即:

  • photo1.jpg → photo1/photo1.jpg
  • photo2.png → photo2/photo2.png

Java 實現方案

雖然 Shell 或 Python 腳本更簡潔,但 Java 同樣可以高效完成:

import java.io.*;

public class ImageOrganizer {
    public static void main(String[] args) {
        File sourceDir = new File("/home/user/Pictures");
        File[] files = sourceDir.listFiles((dir, name) -> 
            name.toLowerCase().endsWith(".jpg") || 
            name.toLowerCase().endsWith(".png") ||
            name.toLowerCase().endsWith(".jpeg")
        );
        
        if (files == null) return;
        
        for (File file : files) {
            String fileName = file.getName();
            // 獲取不含擴展名的文件名
            String folderName = fileName.substring(0, fileName.lastIndexOf('.'));
            
            // 創建目標文件夾
            File targetDir = new File(sourceDir, folderName);
            if (!targetDir.exists()) {
                targetDir.mkdirs();
            }
            
            // 目標文件路徑
            File targetFile = new File(targetDir, fileName);
            
            // 移動文件(同分區可用 renameTo,跨分區需複製+刪除)
            if (!file.renameTo(targetFile)) {
                // 跨分區時使用複製+刪除
                copyFile(file, targetFile);
                file.delete();
            }
            System.out.println("已處理: " + fileName);
        }
    }
    
    private static void copyFile(File src, File dest) {
        try (InputStream in = new FileInputStream(src);
             OutputStream out = new FileOutputStream(dest)) {
            byte[] buffer = new byte[8192];
            int length;
            while ((length = in.read(buffer)) > 0) {
                out.write(buffer, 0, length);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

關鍵點解析

  • 文件過濾:使用 listFiles(FileFilter) 僅處理圖片文件
  • 文件名解析:lastIndexOf('.') 獲取擴展名前的文件名
  • 目錄創建:mkdirs() 可創建多級目錄,存在時不報錯
  • 文件移動:優先用 renameTo()(原子操作,極快),失敗則退回到複製+刪除
  • 資源管理:使用 try-with-resources 自動關閉流

Python 替代方案(更簡潔)

import os
import shutil

source = "/home/user/Pictures"
for filename in os.listdir(source):
    if filename.lower().endswith(('.jpg', '.png', '.jpeg')):
        name, _ = os.path.splitext(filename)
        target_dir = os.path.join(source, name)
        os.makedirs(target_dir, exist_ok=True)
        shutil.move(os.path.join(source, filename), os.path.join(target_dir, filename))

總結

Java 版本適合集成到現有 Java 應用中;Python/Shell 適合一次性腳本任務。核心邏輯一致:遍歷 → 解析文件名 → 創建同名目錄 → 移動文件。處理大量文件時建議添加進度顯示與異常重試機制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved