将E盘下的180文件夹下的所有最深层文件放到E盘下的car文件加下,并且要求重命名文件,并且判断最里层文件同目录下是否有多个文件,并且判断文件夹是否为空

简介: package com.cheyoushuor.enamefile; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; imp

package com.cheyoushuor.enamefile;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class ReNameFileName {
    private static int COUNT = 0;
    private static int NUM = 0;

    /**
     * @param args
     * @throws IOException
     * @throws FileNotFoundException
     */
    public static void main(String[] args) throws FileNotFoundException, IOException {
        readAndCopeFile("E:" + File.separator + "180");
    }

    /*
     * 执行文件复制操作
     */
    public static void copyFile(String filePath) {
        File file = new File(filePath);
        System.out.println(file.getName());
    }

    /**
     * 读取文件并且复制文件到指定目录
     *
     * @param filepath
     * @return
     * @throws FileNotFoundException
     * @throws IOException
     */
    public static boolean readAndCopeFile(String filepath)
            throws FileNotFoundException, IOException {
        try {
            File file = new File(filepath);
            if (file.isDirectory()) {
                NUM++;
                System.out.println(NUM + "Nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn");
                String[] filelist = file.list();
                for (int i = 0; i < filelist.length; i++) {
                    File readfile = new File(filepath + "\\" + filelist[i]);
                    if (!readfile.isDirectory()) {
                        System.out.println("\r\n");

                        //获取文件绝对路径
                        String filePath = readfile.getPath();
                        //System.out.println("path=" + filePath);

                        //获取原文件的名称
                        String fileName = readfile.getName();
                        //System.out.println("fileName = " + fileName);

                        //测试拼接的文件路径是否正确
                        //System.out.println("E:" + File.separator + "car" + File.separator + fileName);

                        //父文件夹的路径
                        String parentFileName = readfile.getParent();
                       
                        File parentFile = new File(parentFileName);
                        //用于判断文件夹里面的文件到底有多少个。如果一个文件夹下多个文件,那么现实是多个文件的问价路径,下面两行为输出提示语句
                        if (filelist.length > 1) {
                            System.out.println(file.getPath()+"-----------------------------------------------------------------------------------------------------------------------------------");
                        }

                        //获取到扩展名前.在文件名中的位置
                        int beginIndex = fileName.indexOf(".");

                        //产生新文件明
                        String newFileName = parentFileName.substring(parentFileName.lastIndexOf("\\") + 1).substring(0, 4)
                                + fileName.substring(beginIndex, fileName.length());
                        //System.out.println(newFileName);

                        //调用复制文件的代码
                        copyFile(filePath, "E:" + File.separator + "car" + File.separator + newFileName, false);
                    } else if (readfile.isDirectory()) {
                        ++COUNT;
                        System.out.println(COUNT+"==================================================================================================");
                        if(!isFolerNull(readfile)) {
                            System.out.println(readfile.getPath() + "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
                        }
                        readAndCopeFile(filepath + "\\" + filelist[i]);
                    }
                }
            }
        } catch (FileNotFoundException e) {
            System.out.println("readfile()   Exception:" + e.getMessage());
        }
        return true;
    }
   
    public static boolean isFolerNull(File f) {
        return f.list().length > 0;
    }

 

    /**
     * 复制单个文件
     *
     * @param oldPath老文件名
     * @param newPath新文件名
     */
    public static void copyFile(String oldPath, String newPath) {
        try {
            int byteread = 0;
            File oldfile = new File(oldPath);
            if (oldfile.exists()) {  //文件存在时 
                InputStream inStream = new FileInputStream(oldPath);  //读入原文件 
                FileOutputStream fs = new FileOutputStream(newPath);
                byte[] buffer = new byte[1444];
                while ((byteread = inStream.read(buffer)) != -1) {
                    fs.write(buffer, 0, byteread);
                }
                inStream.close();
            }
        } catch (Exception e) {
            System.out.println("复制单个文件操作出错");
            e.printStackTrace();
        }
    }

    /**
     * 复制单个文件
     *
     * @param srcFileName 待复制的文件名
     * @param destFileName 目标文件名
     * @param overlay 如果目标文件存在,是否覆盖
     * @return 如果复制成功,则返回true,否则返回false
     */
    public static boolean copyFile(String srcFileName, String destFileName, boolean overlay) {
        //判断原文件是否存在
        File srcFile = new File(srcFileName);
        if (!srcFile.exists()) {
            System.out.println("复制文件失败:原文件" + srcFileName + "不存在!");
            return false;
        } else if (!srcFile.isFile()) {
            System.out.println("复制文件失败:" + srcFileName + "不是一个文件!");
            return false;
        }
        //判断目标文件是否存在
        File destFile = new File(destFileName);
        if (destFile.exists()) {
            //如果目标文件存在,而且复制时允许覆盖。
            if (overlay) {
                //删除已存在的目标文件,无论目标文件是目录还是单个文件
                System.out.println("目标文件已存在,准备删除它!");

                boolean success = destFile.delete();
                if (success = false) {
                    System.out.println("复制文件失败:删除目标文件" + destFileName + "失败!");
                    return false;
                }
            } else {
                System.out.println("复制文件失败:目标文件" + destFileName + "已存在!");
                return false;
            }
        } else {
            if (!destFile.getParentFile().exists()) {
                //如果目标文件所在的目录不存在,则创建目录
                System.out.println("目标文件所在的目录不存在,准备创建它!");
                if (!destFile.getParentFile().mkdirs()) {
                    System.out.println("复制文件失败:创建目标文件所在的目录失败!");
                    return false;
                }
            }
        }
        //准备复制文件
        int byteread = 0;//读取的位数
        InputStream in = null;
        OutputStream out = null;
        try {
            //打开原文件
            in = new FileInputStream(srcFile);
            //打开连接到目标文件的输出流
            out = new FileOutputStream(destFile);
            byte[] buffer = new byte[1024];
            //一次读取1024个字节,当byteread为-1时表示文件已经读完
            while ((byteread = in.read(buffer)) != -1) {
                //将读取的字节写入输出流
                out.write(buffer, 0, byteread);
            }
            System.out.println("复制单个文件" + srcFileName + "至" + destFileName + "成功!");
            return true;
        } catch (Exception e) {
            System.out.println("复制文件失败:" + e.getMessage());
            return false;
        } finally {
            //关闭输入输出流,注意先关闭输出流,再关闭输入流
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


 

 

目录
相关文章
|
4天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
282 116
|
19天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
6天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
406 38
Meta SAM3开源:让图像分割,听懂你的话
|
13天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
670 220
|
1天前
|
Windows
dll错误修复 ,可指定下载dll,regsvr32等
dll错误修复 ,可指定下载dll,regsvr32等
132 95
|
11天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1655 158
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
912 61