需求
在mov文件夹下有很多文件夹,子文件夹里还有文件,现要求将以.mkv结尾的文件且文件名不包括sample的文件的文件名改为和子文件夹一致的名字,并将其他文件或文件夹删除,如下
最终效果如下
实现
注意:对于批量多级节点需要进行递归处理
package day02;
import java.io.File;
public class FileDemo09 {
/**
* 需求:将给定文件夹下mkv文件的名字修改为该文件夹名
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception{
File f = new File("E:\\奥斯卡历届最佳影片");//要求改的父文件夹
if(f.isDirectory()) {
File[] files = f.listFiles();
for(File ff:files) {//遍历所有的子文件夹
if(ff.isDirectory()) {
changeName(ff);//调用函数进行文件改名等操作
}
}
}
}
/**
* 根据需求修改文件名
* @param f
* @throws Exception
*/
public static void changeName(File f) throws Exception{
String name = f.getName();//获取子文件夹名(后面我们用它来改文件名)
if(f.isDirectory()) {
File[] fs = f.listFiles();
if(fs==null) {
System.out.println(f.getName()+"目录下没有文件");
}
for(File ff:fs) {//遍历子文件夹中的所有文件,找出满足的文件,进行改名和删除操作
if(ff.getName().endsWith(".mkv")&&!ff.getName().contains("sample")) {
String path = ff.getCanonicalPath();
int index = path.lastIndexOf('\\');
String newPath = path.substring(0,index+1)+name+" .mkv";
File nf = new File(newPath);
if(ff.renameTo(nf)) {
System.out.println("改名成功");
}else {
System.out.println("改名失败");
}
}else{
deleteFile(ff);
};
}
}
}
/**
* 删除操作需要进行递归删除
* @param f
*/
public static void deleteFile(File f) {
if(!f.isDirectory()) {
f.delete();
return;
}else {
File[] fs = f.listFiles();
for(File ft:fs) {
deleteFile(ft);
}
f.delete();
}
}
}