将目标目录下的全部文件,重命名并拷贝到指定目录。通过文件名表示之前文件的层级关系
程序员文章站
2022-06-16 16:54:24
...
将目标目录下的全部文件,重命名并拷贝到指定目录。通过文件名表示之前文件的层级关系
-
记录一下自己写的小脚本。
-
使用场景举个例子:
-
如:
- 目标目录为
D:\downlad\
- 下面有图片
D:\downlad\abc.pic
,D:\downlad\pic\abc.pic
,D:\downlad\pic\2020\abc.pic
- 我想把
D:\downlad\
下各个文件都拷贝到平级目录,但又要保持原先文件在的排序 - 然后就考虑重命名这些图片。
- 比如拷贝到
D:\trans\
,这些文件就变成了:
1.D:\trans\abc.pic
,2.D:\trans\pic_abc.pic
,3.D:\trans\pic_2020_abc.pic
- 这样同文件夹下的文件就会有相同的文件前缀。可以应对大多数整理多层级文件的场景。
- 目标目录为
-
下面直接上Java代码
-
文件名转换工具类
/**
* @author RedRush
* @date 2021/6/28 10:53
* @description: 将根目录下的全部文件,粘贴至目标地址,将之前的路径层级,通过文件名展示
*/
public class TransPicName {
private String PICHEAD = "picture"; // 重命名的文件头,可以为空
private String ROOT = "D:\\trans\\"; // 转换完成的输出路径
private String SOURCE = "D:\\Downloads\\picture\\"; // 要处理目标路径
@Test
public void TestGetFiles(){
int skip = 0, copy = 0;
List<File> files = getFiles(SOURCE);
CopyFile copyFile = new CopyFile();
for(File f : files){
// 小文件不予处理,跳过。此块可以不要
if (skip(f)){
System.out.println("skip:" + f.getAbsolutePath());
skip++;
continue;
}
System.out.println(f.getAbsolutePath());
// 截取要处理的文件路径,并处理路径分隔符
String picUrl = f.getAbsolutePath().substring(SOURCE.length()).replaceAll("\\\\", "_");
picUrl = ROOT + PICHEAD + special(picUrl);
System.out.println(picUrl);
copyFile.copy(f.getAbsolutePath(), picUrl);
copy++;
}
System.out.println("拷贝任务结束,共" + files.size() + "个文件");
System.out.println("拷贝" + copy + "个文件,跳过" + skip + "个文件");
}
// 目标文件名进行特判处理(比如删除空格,删除一些奇怪的东西)
public String special(String str){
String res = str.replaceAll(" ", "");
// res = res.replaceAll("9", "");
return res;
}
// 小文件跳过
public boolean skip(File f){
return f.length() < 1000;
}
// 获取目录下的全部文件
public List<File> getFiles(String path){
File root = new File(path);
List<File> files = new ArrayList<File>();
if(!root.isDirectory()){
files.add(root);
}else{
File[] subFiles = root.listFiles();
for(File f : subFiles){
files.addAll(getFiles(f.getAbsolutePath()));
}
}
return files;
}
}
- 拷贝工具类
public class CopyFile {
/**
* sFile为被拷贝文件的绝对路径
* tFile为拷贝文件的输出路径
* */
public boolean copy(String sFile, String tFile){
System.out.println("目标文件地址:"+tFile);
try{
FileInputStream fis = new FileInputStream(sFile);//创建输入流对象
FileOutputStream fos = new FileOutputStream(tFile); //创建输出流对象
byte datas[] = new byte[1024*8];//创建搬运工具
int len = 0;//创建长度
while((len = fis.read(datas))!=-1){ //循环读取数据
fos.write(datas,0,len);
}
fis.close();//释放资源
fis.close();//释放资源
}catch (Exception e){
e.printStackTrace();
return false;
}
return true;
}
}
上一篇: JAVA 枚举的简单应用
下一篇: 八、枚举的简单应用