大家有没感觉我视频资料的名称太长了?以至于有时候根部看不清后面是什么内容,而且一眼扫过去都是前缀名呀,有木有!我都是用列表模式查看的-。-!。对于我这个处女座的人来说太不能忍了,于是有了自己动手批量修改文件名的想法。
通过我们所学的内容可以“轻松”的搞定。其实也没有那么轻松,因为是第一次设计程序,没有啥经验,在设计这个程序的时候,我用了七八个小时的时间,走了N多冤枉路,一度想用头撞墙。。。不过因为对问题的执着,我还是坚持了下来。
那么要怎么该名字呢?用renameto方法
renameto方法的用法是
File f1=new File(原来的路径)
File f2=new File(更改后的路径)
f1.renameTo(f2)
由于是遍历文件夹获取文件,所以File的构造函数里的路径名用变量表示
更改后的路径的父目录不变,只需改name即可。
修改name的原理是用字符串中的截取子串方法String str.subString(indexOf(“-”)+1)//用“-”截取子串,+1是因为验证发现子串包含“-”所以+1.
开始想用过滤器,验证后发现,使用过滤器后用listFiles什么都获取不到。 因为是 name.endsWith(".avi"),在最上层目录中只有相应天数的文件夹,所以获取不到avi文件对象。不知道用过滤器怎么用。
/*
* 需求:简化视频名称。
* 例如:传智播客毕向东Java基础视频教程-day13-01-String(概述)。avi
* 重命名为:day13-01-String(概述)。avi
* */
package demo;
import java.io.File;
public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
File dir=new File("d:\\shipin2");//存放视频的总目录,我的总目录下面还有天数目录。
show(dir);
}
public static void show(File dir){
File [] files=dir.listFiles();//用listFiles扫描多层文件目录,返回问价对象
for(int x=0;x<files.length;x++){//把多级目录中的对象取出,存入到一个File数组中。
if(files[x].isDirectory())//如果是目录就递归。
show(files[x]);
if(files[x].getName().endsWith(".avi"))//如果不是目录 就是对象,对对象的名字筛选,取出avi文件。
rename(files[x]);//将vai类型的文件对象改名
}
}
public static void rename(File f){
String name =f.getName();
String newName=name.substring(name.indexOf("-")+1);//用“-”截取子串
System.out.println(newName);
File newFile=new File(f.getParent(),newName);//父目录不改变,只需要改变文件名即可。
f.renameTo(newFile); //改名的动作
}
}
免责声明:该文章经笔者本人验证之后,被修改的视频没有任何异常,可以正常播放。如果各位同学想要尝试一下,建议尽量用备份数据。
如果该代码有什么不足,请联系我。
该文章仅是为了探讨技术,无任何不尊重官方教程的意思。嘿嘿:)
|