【Java脚本】--- 移动(剪切)文件

本文介绍了如何使用Java原生类和Apache Commons IO工具类实现批量文件移动,以提升工作效率。提供了具体代码示例,包括将指定文件夹下的.mp3文件移动到根目录以及简单文件移动操作。并对比了两种方法在移动失败时的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在日常开发和生活工作中,经常要对文件进行复制、剪切等操作。当数据量巨大,几百上千甚至更多时,且不位于同一个文件夹下时,手动操作需要花费大量时间。通过简单的小脚本,则可以提高效率,关键是可以复用,一劳永逸。

一、场景

指定文件夹下的文件移动指定文件夹下。

二、实现方式

方式一:Java原生类代码实现

public boolean renameTo(File dest)

栗子:将F盘下的所有文件夹下的所有.mp3文件移动到F盘根目录 (脚本由来场景)

public static void fileMove(){
    //拿到所有文件,逐一遍历移动到根目录
        //拿到第一级的f盘的所有文件夹
        File f = new File("f:");
        FileFilter fileFilter = new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                if (pathname.isDirectory()){
                    return true;
                }
                return false;
            }
        };
        File[] allDirectories= f.listFiles(fileFilter);

        //拿到对应的第二级f盘下的文件夹中所有文件,遍历所有文件夹,文件名要包含.mp3
    for (File directory : allDirectories) {
        File[] allFiles = directory.listFiles();
        for (File item: allFiles ) {
            //可以匿名内部类写FileFilter指定文件类型、名称等
            if (!item.getName().endsWith(".mp3")){
                continue;
            }
            File newName = new File("f:\\" + item.getName());
            System.out.println("监测到文件,准备转移");
            if(!item.renameTo(newName)) {
                System.out.println(item.getName() + " 文件转移失败!");
                continue;
            }
            System.out.println(item.getName() + " 文件移动成功!");
        }
    }
    System.out.println("文件转移完毕,程序结束");

}

方式二:使用Apache的commons-io工具类实现

public static void moveFile(File srcFile, File destFile) throws IOException 

Maven导包:https://mvnrepository.com/artifact/commons-io/commons-io

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

栗子:简单的将D盘下的test文件夹中的a.txt文件移动到D盘下。(只是简单栗子)

public static void apacheCommons(){
    
    File sourceFile =  new File("D:test/a.txt");
    //目的文件名可以和原文件名不一致
//  File destFile = new File("D:b.txt");  
    File destFile = new File("D:a.txt");
    try {
        FileUtils.moveFile(sourceFile,destFile);
        System.out.println("移动成功");
    }catch (IOException e){
        e.printStackTrace();
    }
}

三、实现方式对比

Java原生类实现:当移动失败时,方法返回false。失败的原因之一可能是已经存在这样的目标文件。

Apache commons-io工具类实现:当移动失败时,会抛出异常。失败的原因,根据源码显示是删除文件失败。

throw new IOException("Failed to delete original file '" + srcFile + "' after copy to '" + destFile + "'");

最后

匆匆记录,而且笔者水平有限,文章不是很全面,还有很多需要学习的地方,有误的地方请指正,谢谢啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值