package com.cn.fdapfe.common.utils.file;

import java.io.IOException;
import java.nio.file.*;

public class FileCopyUtils {

    /**
     * 将指定文件从源目录复制到目标目录
     *
     * @param sourceDir 源文件所在目录路径（例如："D:/source"）
     * @param targetDir 目标目录路径（例如："E:/target"）
     * @param fileName  要复制的文件名（例如："document.txt"）
     * @return
     * @throws IOException              当文件操作发生错误时抛出
     * @throws IllegalArgumentException 当参数非法（如路径或文件名为空）时抛出
     */
    public static Object copyFile(String sourceDir, String targetDir, String fileName) throws IOException {
        // 校验参数合法性
        if (sourceDir == null || targetDir == null || fileName == null || fileName.isEmpty()) {
            throw new IllegalArgumentException("源目录、目标目录和文件名均不可为空");
        }

        // 截取文件名，去掉 "_20250421144724A001" 部分
        int underscoreIndex = fileName.lastIndexOf('_'); // 找到最后一个下划线的位置
        int dotIndex = fileName.lastIndexOf('.');        // 找到最后一个点的位置
        String fileName2= "";
         // 如果文件名符合预期格式（包含下划线和扩展名），则进行截取
        if (underscoreIndex > 0 && dotIndex > underscoreIndex) {
            fileName2 = fileName.substring(0, underscoreIndex) + fileName.substring(dotIndex);
        }

        // 构建源文件和目标文件路径
        Path sourcePath = Paths.get(sourceDir, fileName);
        Path targetPath = Paths.get(targetDir, fileName2);

        // 检查源文件是否存在
        if (!Files.exists(sourcePath) || Files.isDirectory(sourcePath)) {
            throw new IOException("源文件不存在或为目录：" + sourcePath);
        }

        // 创建目标目录（如果不存在）
        try {
            Files.createDirectories(targetPath.getParent());
        } catch (IOException e) {
            throw new IOException("目标目录创建失败：" + e.getMessage());
        }

        // 执行文件复制（覆盖已存在文件）
        try {
            Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
        } catch (IOException e) {
            throw new IOException("文件复制失败：" + e.getMessage());
        }
        return "ok";
    }

    // 示例使用
    public static void main(String[] args) {
        try {
            copyFile("E:/source", "E:/target", "example.txt");
            System.out.println("文件复制成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}