最近下了个武林外传,可惜命名全是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#编程的方法改变文件扩展名的文件,必须使用Path类。 Path类用来解析文件系统路径的各个部分。静态方法Path....
- 文档整理:如果你需要统一一批文档的格式,比如将.doc文件全部改为.docx,这个工具能大大提高效率。 - 数据迁移:在不同系统或平台间转移文件时,可能需要调整文件后缀以适应新环境的要求。 需要注意的是,虽然...
后缀名,也称为文件扩展名,通常位于文件名的末尾,由一个点(.)分隔。批量修改文件后缀名的能力是一种实用的技巧,尤其在需要统一更改大量文件类型时,例如在数据迁移、格式转换或者系统调整中。 批量修改文件...
一个典型的C++批处理修改文件扩展名的程序可能包含以下部分:命令行参数解析、文件遍历逻辑、文件扩展名修改逻辑以及错误处理。 9. **编译与运行**: 完成源代码编写后,需要使用C++编译器如GCC或Clang将其编译为...
例如,要将所有.txt文件改为.docx,可以输入: ``` ren *.txt *.docx ``` 在Unix-like系统(如Linux或MacOS)的Terminal中,可以使用`mv`命令配合通配符实现: ``` mv *.txt *.docx ``` 2. 使用文件管理软件...
在这个场景中,"批量修改文件后缀名(源码)"是一个用VS2008开发的程序,它允许用户一次性更改多个文件的扩展名。这样的工具对于整理文件库,统一文件格式,或者进行特定的数据转换都十分有用。 VS2008,全称Visual...
当我们需要对img文件进行修改时,WinImage提供了一个名为EXTRACT.EXE的免费小工具,该工具具有强大的功能,可以方便地处理img文件。 【描述详解】 WinImage是一款专业的磁盘映像管理软件,它允许用户创建、编辑和...
有时,我们可能需要批量修改多个文件的扩展名,这时可以使用特定的工具或编程脚本。例如,标签中提到的“源码 工具”可能是指一个用于批量修改扩展名的程序。这个程序可能包含以下功能: 1. 选择目标文件夹,包含...
批量处理可以大大提高工作效率,避免手动更改每个文件的扩展名所耗费的时间。在这个场景中,我们讨论的是如何将cpp(C++源代码文件)文件批量修改为txt(文本文件)。 首先,我们要理解文件扩展名的重要性。文件...
在这个"易语言批量修改文件后缀源码"的主题中,我们将深入探讨如何使用易语言来实现批量修改文件后缀的功能。 在计算机操作中,文件后缀名是非常重要的,它决定了系统如何识别和处理文件。例如,.txt是文本文件,....
点击文件资源管理器的搜索框,输入"kind:=pdf modified:>yesterday"(其中"pdf"替换为你需要的后缀名,"yesterday"可以改为具体的日期或时间范围),就可以得到符合要求的文件列表。在macOS中,可以使用Spotlight...
在教育环境中,教师可能需要统一学生的作业提交格式,如将所有".doc"文件改为".pdf"以确保一致性。 总之,批量文件后缀名修改工具是IT工作中不可或缺的辅助工具,它通过自动化的方式帮助用户快速、准确地完成大量...
本文将为您详细讲解如何在 Windows 10 系统中修改文件后缀名,包括为什么需要修改文件后缀名、修改文件后缀名的步骤、修改文件后缀名的注意事项等内容。 为什么需要修改文件后缀名? 文件后缀名是指文件名中用于...
将当前文件`%%i`的扩展名改为`!filename!%newext%`。 保存文件为`start.bat`,并确保将`.txt`扩展名更改为`.bat`。然后,将此批处理脚本放到包含需要修改扩展名的文件的同一目录下,双击运行,它会批量修改当前目录...
萤火虫文件批量改名器,可以修改统一的文件名称。
有很多文件没有扩展名(后缀 .txt .jpg 等),或者想修改为其它的扩展名,那么你可以使用这个小工具.(win7 下 使用无问题) 这本身就是个批处理命令,网上也有自己制作的方法。 使用说明: 1.将你想要修改的文件 都...
支持对文件扩展名字符串的添加、替换、删除、加序编号、字母大小写等基本批量更名操作;支持使用 Exif 标签和 GPS 标签给 JPEG 数码照片及图片批量更名; 支持正则表达式匹配和替换以及元变量表达式的插入;支持...