修改文件后缀名的小功能

1.实现以下功能,将mp3改为flac
2.名称重复的删除掉,包括秋名山的老司基 - 从你的全世界路过 (插曲扒带版本).mp3 秋名山的老司基 - 从你的全世界路过 (插曲扒带版本)(1).mp3,最终保留的只有这一个/root/音乐/秋名山的老司基 - 从你的全世界路过 (插曲扒带版本).flac
3.如果有 flac和mp3同名的情况下,删除mp3保留flac

拿到xx下所有的文件名。
枚举名称包括(x数字).mp3或者(x数字).flac或者(副本).mp3如果有此字眼,直接删除这个文件。

第二遍就直接创建两个map
一个是flacmap 存放所有flac ,另一个存放mp3,另外在flac中进行conketkey如果有,直接不保存这个map的数据,并且删除掉这个文件。
最后,留下来的只有mp3中剩下可以用的,遍历mp3的map,然后修改文件名即可。

import java.io.File;
import java.util.HashMap;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author  player3
 */
public class FileTodo {
    public static void main(String[] args) {
//        拿到xx下所有的文件名。
//        枚举名称包括(x数字).mp3或者(x数字).flac或者(副本).mp3如果有此字眼,直接删除这个文件。
//
//        第二遍就直接创建两个map
//        一个是flacmap 存放所有flac ,另一个存放mp3,另外在flac中进行conketkey如果有,直接不保存这个map的数据,并且删除掉这个文件。
//        最后,留下来的只有mp3中剩下可以用的,遍历mp3的map,然后修改文件名即可。
        //选择根目录
            String targetDirectory="/root/音乐";
            //搞成文件格式
        File file = new File(targetDirectory);
        //拿到所有文件名
        String[] list = file.list();
        //匹配(1-n)|(复件)
        String pattern="[\\((][1-9][0-9]{0,}[\\))]|\\u590d\\u4ef6";
        for (int i = 0; i < Objects.requireNonNull(list).length; i++) {
          String text=  list[i];
             Pattern r = Pattern.compile(pattern);
            Matcher m = r.matcher(text);
            if(m.find()){
                //找到删除
                File delfile = new File(targetDirectory +File.separator+ text);
                boolean delete = delfile.delete();
                System.out.println(delete);
            }
         }
        HashMap<String, String> flacMap = new HashMap<>(16);
        String[] newList = file.list();
        for (int i = 0; i < Objects.requireNonNull(newList).length; i++) {
            String newName = newList[i];
            if(newName.contains("flac")){
                //flac
                flacMap.put(newName.substring(0,newName.indexOf(".flac")),"flac");
            }else{
                //mp3的进行判断key是否存在,如果存在直接删除,不存在添加到后面的map
               if(flacMap.containsKey(newName.substring(0,newName.indexOf(".mp3")))) {
                    //不存在需要进行转flac,存在则删除
                   File delFile = new File(targetDirectory+File.separator+ newName);
                   boolean delete = delFile.delete();
                   System.out.println(newName+"删除是否成功:"+delete);
               }else{
                   //获取前缀
                   String renamefileString = newName.substring(0, newName.indexOf(".mp3"));
                   //打开文件
                   File updateNameFile = new File(targetDirectory+File.separator+ newName);
                   //要修改的名称
                   File renamefile = new File(targetDirectory + File.separator + renamefileString + ".flac");
                   boolean flag = updateNameFile.renameTo(renamefile);
                   System.out.println(flag);
                   flacMap.put(renamefileString,"flac");
               }

            }





        }

    }
}

对两个循环进行合并

import java.io.File;
import java.util.HashMap;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author  player3
 */
public class FileTodo {
    public static void main(String[] args) {
//        拿到xx下所有的文件名。
//        枚举名称包括(x数字).mp3或者(x数字).flac或者(副本).mp3如果有此字眼,直接删除这个文件。
//
//        第二遍就直接创建两个map
//        一个是flacmap 存放所有flac ,另一个存放mp3,另外在flac中进行conketkey如果有,直接不保存这个map的数据,并且删除掉这个文件。
//        最后,留下来的只有mp3中剩下可以用的,遍历mp3的map,然后修改文件名即可。
        //选择根目录
            String targetDirectory="/root/音乐";
            //搞成文件格式
        File file = new File(targetDirectory);
        //拿到所有文件名
        String[] list = file.list();
        //匹配(1-n)|(复件)
        String pattern="[\\((][1-9][0-9]{0,}[\\))]|\\u590d\\u4ef6";
        HashMap<String, String> flacMap = new HashMap<>(32);

        for (int i = 0; i < Objects.requireNonNull(list).length; i++) {
          String text=  list[i];
             Pattern r = Pattern.compile(pattern);
            Matcher m = r.matcher(text);
            if(m.find()){
                //找到删除
                File delfile = new File(targetDirectory +File.separator+ text);
                boolean delete = delfile.delete();
                System.out.println(delete);
            }
            String newName =text;
            if(newName.contains("flac")){
                //flac
                flacMap.put(newName.substring(0,newName.indexOf(".flac")),"flac");
            }else{
                //mp3的进行判断key是否存在,如果存在直接删除,不存在添加到后面的map
                if(flacMap.containsKey(newName.substring(0,newName.indexOf(".mp3")))) {
                    //不存在需要进行转flac,存在则删除
                    File delFile = new File(targetDirectory+File.separator+ newName);
                    boolean delete = delFile.delete();
                    System.out.println(newName+"删除是否成功:"+delete);
                }else{
                    //获取前缀
                    String renamefileString = newName.substring(0, newName.indexOf(".mp3"));
                    //打开文件
                    File updateNameFile = new File(targetDirectory+File.separator+ newName);
                    //要修改的名称
                    File renamefile = new File(targetDirectory + File.separator + renamefileString + ".flac");
                    boolean flag = updateNameFile.renameTo(renamefile);
                    System.out.println(flag);
                    flacMap.put(renamefileString,"flac");
                }

            }


        }
   

    }
}

posted @ 2023-03-18 23:20  三号小玩家  阅读(78)  评论(0)    收藏  举报
Title
三号小玩家的 Mail: 17612457115@163.com, 联系QQ: 1359720840 微信: QQ1359720840