Java弹出目录选择框及文件操作

博文背景:

Java知识分享网http://www.java1234.com/a/yuanchuang/里的视频涉及到Java开发常用到的技术。我从那里下载下来的视频,在文件夹中不是按照顺序排列的,于是用数字开头对它们进行重命名,即将“[www.java1234.com]《一头扎进XML》第一讲.mp4”重命名为“1[www.java1234.com]《一头扎进XML》第一讲.mp4”。
有的文件夹中的个数很多,手动重命名花费时间太多,而且很无聊,故写了下面的程序来实现这个过程。特此记录。

代码中含有的知识点:

  1. 如何弹出目录选择框;
  2. 判断以数字开头,中间含义数字的正则表达式;
  3. 计数文件夹中的文件个数;
  4. 如何对文件重命名

代码:

package com.malw.prefix;

import java.io.File;
import java.util.regex.Pattern;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.filechooser.FileSystemView;
/**
 * 本类的功能是为文件重命名
 * @author livy
 *
 */
public class AddPrefix {
    private static String[] chUpper=new String[]{"第一讲","第二讲","第三讲","第四讲","第五讲","第六讲","第七讲","第八讲","第九讲","第十讲",
                                                 "第十一讲","第十二讲","第十三讲","第十四讲","第十五讲","第十六讲","第十七讲","第十八讲","第十九讲","第二十讲",
                                                 "第二十一讲","第二十二讲","第二十三讲","第二十四讲","第二十五讲","第二十六讲","第二十七讲","第二十八讲","第二十九讲","第三十讲",
                                                 "第三十一讲","第三十二讲","第三十三讲","第三十四讲","第三十五讲","第三十六讲","第三十七讲","第三十八讲","第三十九讲","第四十讲",
                                                 "第四十一讲","第四十二讲","第四十三讲","第四十四讲","第四十五讲","第四十六讲","第四十七讲","第四十八讲","第四十九讲","第五十讲",};
    private static String[] chUpperWithNum=new String[]{"第1讲","第2讲","第3讲","第4讲","第5讲","第6讲","第7讲","第8讲","第9讲","第10讲",
        "第11讲","第12讲","第13讲","第14讲","第15讲","第16讲","第17讲","第18讲","第19讲","第20讲",
        "第21讲","第22讲","第23讲","第24讲","第25讲","第26讲","第27讲","第28讲","第29讲","第30讲",
        "第31讲","第32讲","第33讲","第34讲","第35讲","第36讲","第37讲","第38讲","第39讲","第40讲",
        "第41讲","第42讲","第43讲","第44讲","第45讲","第46讲","第47讲","第48讲","第49讲","第50讲",};
    /**
     * 选择文件并重命名                                         
     * @param file
     */
    public void reName(File file){
        Pattern pattern = Pattern.compile("^(\\d+)(.*)");//正则表达式,以数字开头
        Pattern pattern2 = Pattern.compile("(.*)(\\d+)(.*)");//中间含有数字
        if(file.isDirectory()){//选择的文件夹
            File[] files = file.listFiles();//指定路径的所有文件(文件夹)
            int numFiles = files.length;//文件个数
            if(numFiles>0){
                for(int i=0;i<numFiles;i++){
                    doRename(files[i],pattern,pattern2);
                }
            }else{
                System.out.println("不存在文件");
            }
        }else if(file.isFile()){//选择的文件
            doRename(file,pattern,pattern2);
        }
    }
    /**
     * 为文件重命名
     * @param file
     * @param pattern
     */
    public void doRename(File file,Pattern pattern,Pattern pattern2){
        String fileName = file.getName();
        String path = file.getParent();
        /*判断文件是否不以数字开头,是否mp4或f4v格式*/
        if(!pattern.matcher(fileName).matches()&&(fileName.endsWith(".mp4")||fileName.endsWith(".f4v")||fileName.endsWith(".flv"))){
            //选择使用chUpperWithNum还是chUpper
            int start=fileName.indexOf("第");
            int end=fileName.indexOf("讲");
            boolean b = pattern2.matcher(fileName.substring(start, end)).matches();
            if(b){
                for(int j=0;j<chUpperWithNum.length;j++){
                    if(fileName.contains(chUpperWithNum[j])){
                        String newTitle=path+"\\"+(j+1)+fileName;
                        file.renameTo(new File(newTitle));//为文件重命名为newNames[i]
                        break;
                    }
                }
            }else{
                for(int j=0;j<chUpper.length;j++){
                    if(fileName.contains(chUpper[j])){
                        String newTitle=path+"\\"+(j+1)+fileName;
                        file.renameTo(new File(newTitle));//为文件重命名为newNames[i]
                        break;
                    }
                }
            }
        }else{
            System.out.println(fileName);
        }

    }
    /**
     * 选择路径或文件
     * @return
     */
    public File selectFilesAndDir(){
        JFileChooser jfc=new JFileChooser();  
        //设置当前路径为桌面路径,否则将我的文档作为默认路径
        FileSystemView fsv = FileSystemView .getFileSystemView();
        jfc.setCurrentDirectory(fsv.getHomeDirectory());
        //JFileChooser.FILES_AND_DIRECTORIES 选择路径和文件
        jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );  
        //弹出的提示框的标题
        jfc.showDialog(new JLabel(), "确定");  
        //用户选择的路径或文件
        File file=jfc.getSelectedFile();  
        return file;
    }
    public static void main(String[] args){
        AddPrefix ap = new AddPrefix();
        ap.reName(ap.selectFilesAndDir());
    }

}

效果:

重命名前
这里写图片描述
重命名后
重命名后


祝:身体健康,工作学习顺利!

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值