解决问题:
如何根据txt文件记录的文件名来批量重命名文件?
条件:
有一份txt文件,里面逐行记录了要重命名的文件的名称
要求批量重命名文件到指定目录下
思路:
读requirement.txt文件的每一行,搜索Rename的目录里的指定文件名,重命名。因为文件名不重复,所以这个搜索用HashSet存放。
注意:
File.renameTo()会删除原来的文件,并且输出父类目录需要存在,输出目录或文件需要一定不存在
实现:
requirement.txt
Main.java
package com.fileRename;
public class Main {
public static void main(String[] args) {
Rename rn = new Rename("C:\\Users\\HG\\Desktop\\test");
rn.setHashMap();
new Read("C:\\Users\\HG\\Desktop\\file\\requirement.txt" , rn).readLine();
}
}
Rename.java
package com.fileRename;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
/*
*@describe:
* 思路:读txt文件的每一行,搜索Rename的目录里的指定文件名。因为文件名不重复,所以这个搜索用HashSet存放
*
*@author: winrh
*/
public class Rename {
String path;//存放重命名文件的目录
Map<String , File> map;
public Rename(String path){
this.path = path;
map = new HashMap<>();
}
public File[] getListFiles(){//返回目录里所有文件
File f = new File(path);
return f.listFiles();
}
public void setHashMap(){//添加到HashMap
for(File file:getListFiles()){
map.put(file.getName(), file);
}
}
public Map<String , File> getHashMap(){
return map;
}
}
Read.java
package com.fileRename;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Map;
/*
*@describe:
* 思路:读txt文件的每一行,搜索Rename的目录里的指定文件名,Rename。重复
*
*@author: winrh
*/
public class Read {
String path;//读的文件
Map<String , File> map;//Rename存放的Hashmap
Rename rn;
public Read(String path , Rename rn){
this.path = path;
this.rn = rn;
}
public void readLine(){
getHashMap();//获取Rename类的HashMap
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(new File(path)));//缓冲流读取
String len = null;
int count = 0;
while((len = br.readLine())!=null){
File file= (File)map.get(len);//get后强转为File类型
System.out.println(file);//File类重写了toString(),可以输出看文件名
file.renameTo(new File("C:\\Users\\HG\\Desktop\\test1\\a"+(count++) + ".txt"));
}
System.out.println("成功");
}catch (IOException e) {
e.printStackTrace();
}finally{
if(br!=null){
try{
br.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}
public void getHashMap(){
map = rn.getHashMap();
}
}
效果: