【java】根据txt文件逐行内容来批量重命名文件

解决问题:

    如何根据txt文件记录的文件名来批量重命名文件?

 

条件:

    有一份txt文件,里面逐行记录了要重命名的文件的名称

    要求批量重命名文件到指定目录下

 

思路:

    读requirement.txt文件的每一行,搜索Rename的目录里的指定文件名,重命名。因为文件名不重复,所以这个搜索用HashSet存放。

 

注意:

    File.renameTo()会删除原来的文件,并且输出父类目录需要存在,输出目录或文件需要一定不存在

 

实现:

requirement.txt

【java】根据txt文件逐行内容来批量重命名文件_第1张图片

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 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 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 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();
	}
	
}

效果:

【java】根据txt文件逐行内容来批量重命名文件_第2张图片

【java】根据txt文件逐行内容来批量重命名文件_第3张图片

 

你可能感兴趣的:(Java,rename,txt,java)