`
Checkmate
  • 浏览: 38814 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

给文件改个名

    博客分类:
  • JAVA
阅读更多

最近下了个武林外传,可惜命名全是wulinwai60zhuan1ixxxxxx.mkv,wulinwai60zhuan2ixxxxxx.mkv这类的东西。一个一个改名那可是80集呢,懒得改了,于是乎准备写个程序来改一改。

 

最后发现写程序用的时间比一个一个改还慢。

 

 

 

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;



public class FileRenamer
{

    private static Properties consProperties = new Properties();

    public static final String PATH_PREFIX = "resource\\";

    public static final String INPUT_FILE_NAME = "inputfile";

    public static String MODIFY_FILE_SUFFIX = "suffix";


    /**
     * this method get the properties object from the defination folder
     * 
     * 
     */

    public static void getProperties()
    {
        try
        {

            InputStreamReader isr = new InputStreamReader(new FileInputStream(
                new File(PATH_PREFIX + "file.properties")), "GBK");

            consProperties.load(isr);
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (IOException ex)
        {
            ex.printStackTrace();
        }
        catch (Exception t)
        {
            t.printStackTrace();
        }
    }


    /**
     * this method read the constant of the file which include the name of every
     * chapter remember you should transform the encoding of the stream to GBK ,
     * or you will get the messy code
     * 
     * @param file
     * @return
     */
    public static List readFileConstant(File file)
    {
        List tempList = new ArrayList();

        BufferedReader input = null;

        try
        {
            InputStreamReader isr = new InputStreamReader(new FileInputStream(
                file), "GBK");

            input = new BufferedReader(isr);
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }

        String tempString = "";

        try
        {
            while (null != (tempString = input.readLine()))
            {
                tempList.add(tempString);
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return tempList;
    }


    /**
     * this method used for create some test file to read and rename please make
     * the name a little complex or it's easy to read and rename
     * 
     * @param filename
     * @param suffix
     */
    public static void createFile(String filename, String suffix)
    {
        try
        {
            FileOutputStream fos = new FileOutputStream(new File("resource\\"
                    + filename + suffix));
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }


    public static String[] filtrateFileName(String path, final String suffix)
    {
        File f = new File(path);

        String[] nameList = null;

        nameList = f.list(new FilenameFilter() {

            @Override
            public boolean accept(File dir, String name)
            {
                return name.endsWith(suffix);
            }
        });

        return nameList;
    }


    /**
     * this method used for sort the reading file name order the default order
     * like xx1xx.pdf , xx10xx.pdf....not xx1xx.pdf,xx2xx.pdf this is the core
     * technology of this app.
     * 
     * @param nameList
     */
    public static void sortFileName(String[] nameList)
    {
        List tempList = new ArrayList();

        for (int i = 0; i < nameList.length; i++)
        {
            tempList.add(nameList[i]);
        }

    }


    public static Map getNumberMap(String[] tempStringList,
        int NumberAppearTimes)
    {
        List setList = new ArrayList();

        for (int i = 0; i < NumberAppearTimes; i++)
        {
            setList.add(new LinkedHashSet());
        }

        String tempString = "";

        String recordNumString = "";

        char tempCharList[] = null;

        boolean mark = false;

        boolean numberRecorderFlag = false;

        int suffixLength = 0;

        int setCursor = 0;

        suffixLength = tempStringList[0].length()
                - tempStringList[0].lastIndexOf(".") + 1;

        for (int i = 0; i < tempStringList.length; i++)
        {
            tempString = tempStringList[i];

            tempCharList = tempString.toCharArray();

            for (int j = 0; j < tempCharList.length - suffixLength; j++)
            {
                if (tempCharList[j] >= 48 && tempCharList[j] <= 57)
                {
                    recordNumString += String.valueOf(tempCharList[j]);

                    mark = true;
                }
                else
                {
                    if (mark == true)
                    {
                        mark = false;

                        ((Set) setList.get(setCursor)).add((recordNumString));
                        setCursor++;
                        recordNumString = "";
                    }

                }

                if (j == tempCharList.length - (1 + suffixLength))
                {
                    if (tempCharList[j] > 48 && tempCharList[j] < 57)
                    {
                        setCursor++;
                        ((Set) setList.get(setCursor)).add((recordNumString));
                        recordNumString = "";
                    }
                }

            }

            setCursor = 0;
            recordNumString = "";

        }
        System.out.println("the size is : " + ((Set) setList.get(1)).size());

        Map tempMap = null;

        for (int i = 0; i < NumberAppearTimes; i++)
        {
            if (((Set) setList.get(i)).size() == tempStringList.length)
            {
                tempMap = new HashMap();

                Iterator it = ((Set) setList.get(i)).iterator();

                for (int j = 0; j < tempStringList.length; j++)
                {
                    String tempStr = "";

                    tempStr = it.next().toString();

                    tempMap.put(tempStr, tempStringList[j]);

                }

            }
        }

        return tempMap;

    }


    public static int getNumberTimes(String[] tempStringList)
    {

        int NumRecorder = 0;

        char tempCharList[] = null;

        boolean numberRecorderFlag = true;

        tempCharList = tempStringList[0].toCharArray();

        for (int j = 0; j < tempCharList.length; j++)
        {
            if (tempCharList[j] >= 48 && tempCharList[j] <= 57)
            {
                if (numberRecorderFlag == true)
                {
                    NumRecorder++;
                    numberRecorderFlag = false;
                }
            }
            else
            {
                numberRecorderFlag = true;
            }
        }

        return NumRecorder;
    }


    public static List sortList(List paramList)
    {
        String tempStr = "";

        for (int i = 0; i < paramList.size(); i++)
        {
            for (int j = i; j < paramList.size(); j++)
            {
                if (Integer.valueOf(paramList.get(i).toString()) > Integer
                    .valueOf(paramList.get(j).toString()))
                {
                    tempStr = (String) paramList.get(i);

                    paramList.set(i, paramList.get(j));

                    paramList.set(j, tempStr);
                }
            }
        }

        return paramList;

    }


    public static void main(String args[])
    {
        getProperties();

        List nameList = readFileConstant(new File(PATH_PREFIX
                + consProperties.getProperty(INPUT_FILE_NAME)));
        
        String suffix = consProperties.getProperty(MODIFY_FILE_SUFFIX);
        

        String[] testStringList = filtrateFileName(PATH_PREFIX, "pdf");
        
        Map nameMap = new HashMap();
        
        String tempFileName = "";

        nameMap = getNumberMap(testStringList,getNumberTimes(testStringList));
        
        for (int i = 0; i < 80; i++)
        {
            createFile("wulinwai11zhuan" + i + "xxxxxx", ".pdf");
        }
        
        for(int i = 0 ; i < nameList.size();i++)
        {
            File tempFile = new File(PATH_PREFIX+nameMap.get(String.valueOf(i)));
            
            File DestFile = new File(PATH_PREFIX+nameList.get(i)+suffix);
            
            if(tempFile.exists())
            {
                tempFile.renameTo(DestFile);
            }
        }

    }
}

 

分享到:
评论

相关推荐

    C#遍历文件夹下文件修改后缀名

    注意,批量修改文件后缀名可能会导致一些问题,比如如果两个文件在修改后具有相同的文件名(只是后缀不同),那么在重命名时可能会覆盖原有的文件。因此,在实际应用中,应确保这种操作不会导致数据丢失,或者在执行...

    C#获取并修改文件扩展名的方法

    本文实例讲述了C#获取并修改文件扩展名的方法。分享给大家供大家参考。具体分析如下: 这里使用C#编程的方法改变文件扩展名的文件,必须使用Path类。 Path类用来解析文件系统路径的各个部分。静态方法Path....

    修改文件后缀名工具.zip

    - 文档整理:如果你需要统一一批文档的格式,比如将.doc文件全部改为.docx,这个工具能大大提高效率。 - 数据迁移:在不同系统或平台间转移文件时,可能需要调整文件后缀以适应新环境的要求。 需要注意的是,虽然...

    批量修改文件后缀名

    后缀名,也称为文件扩展名,通常位于文件名的末尾,由一个点(.)分隔。批量修改文件后缀名的能力是一种实用的技巧,尤其在需要统一更改大量文件类型时,例如在数据迁移、格式转换或者系统调整中。 批量修改文件...

    批处理修改文件扩展名(c++源代码)

    一个典型的C++批处理修改文件扩展名的程序可能包含以下部分:命令行参数解析、文件遍历逻辑、文件扩展名修改逻辑以及错误处理。 9. **编译与运行**: 完成源代码编写后,需要使用C++编译器如GCC或Clang将其编译为...

    文件后缀名批量修改

    例如,要将所有.txt文件改为.docx,可以输入: ``` ren *.txt *.docx ``` 在Unix-like系统(如Linux或MacOS)的Terminal中,可以使用`mv`命令配合通配符实现: ``` mv *.txt *.docx ``` 2. 使用文件管理软件...

    批量修改文件后缀名(源码)

    在这个场景中,"批量修改文件后缀名(源码)"是一个用VS2008开发的程序,它允许用户一次性更改多个文件的扩展名。这样的工具对于整理文件库,统一文件格式,或者进行特定的数据转换都十分有用。 VS2008,全称Visual...

    img文件修改工具

    当我们需要对img文件进行修改时,WinImage提供了一个名为EXTRACT.EXE的免费小工具,该工具具有强大的功能,可以方便地处理img文件。 【描述详解】 WinImage是一款专业的磁盘映像管理软件,它允许用户创建、编辑和...

    修改文件的扩展名

    有时,我们可能需要批量修改多个文件的扩展名,这时可以使用特定的工具或编程脚本。例如,标签中提到的“源码 工具”可能是指一个用于批量修改扩展名的程序。这个程序可能包含以下功能: 1. 选择目标文件夹,包含...

    批量修改文件扩展名

    批量处理可以大大提高工作效率,避免手动更改每个文件的扩展名所耗费的时间。在这个场景中,我们讨论的是如何将cpp(C++源代码文件)文件批量修改为txt(文本文件)。 首先,我们要理解文件扩展名的重要性。文件...

    易语言批量修改文件后缀源码

    在这个"易语言批量修改文件后缀源码"的主题中,我们将深入探讨如何使用易语言来实现批量修改文件后缀的功能。 在计算机操作中,文件后缀名是非常重要的,它决定了系统如何识别和处理文件。例如,.txt是文本文件,....

    根据后缀名修改时间来搜索文件

    点击文件资源管理器的搜索框,输入"kind:=pdf modified:&gt;yesterday"(其中"pdf"替换为你需要的后缀名,"yesterday"可以改为具体的日期或时间范围),就可以得到符合要求的文件列表。在macOS中,可以使用Spotlight...

    批量文件后缀名修改工具

    在教育环境中,教师可能需要统一学生的作业提交格式,如将所有".doc"文件改为".pdf"以确保一致性。 总之,批量文件后缀名修改工具是IT工作中不可或缺的辅助工具,它通过自动化的方式帮助用户快速、准确地完成大量...

    Win10文件后缀名怎么修改?.docx

    本文将为您详细讲解如何在 Windows 10 系统中修改文件后缀名,包括为什么需要修改文件后缀名、修改文件后缀名的步骤、修改文件后缀名的注意事项等内容。 为什么需要修改文件后缀名? 文件后缀名是指文件名中用于...

    bat批处理批量修改文件扩展名脚本

    将当前文件`%%i`的扩展名改为`!filename!%newext%`。 保存文件为`start.bat`,并确保将`.txt`扩展名更改为`.bat`。然后,将此批处理脚本放到包含需要修改扩展名的文件的同一目录下,双击运行,它会批量修改当前目录...

    萤火虫文件批量改名器

    萤火虫文件批量改名器,可以修改统一的文件名称。

    批量修改文件扩展名的批处理文件

    有很多文件没有扩展名(后缀 .txt .jpg 等),或者想修改为其它的扩展名,那么你可以使用这个小工具.(win7 下 使用无问题) 这本身就是个批处理命令,网上也有自己制作的方法。 使用说明: 1.将你想要修改的文件 都...

    批量修改文件名工具/加后缀前缀/批量修改批量重命名工具替换文件后缀软件

    支持对文件扩展名字符串的添加、替换、删除、加序编号、字母大小写等基本批量更名操作;支持使用 Exif 标签和 GPS 标签给 JPEG 数码照片及图片批量更名; 支持正则表达式匹配和替换以及元变量表达式的插入;支持...

Global site tag (gtag.js) - Google Analytics