机缘巧合:对文件夹整理
有次对桌面上的文件进行分类整理的时候,发现有很多的东西只需要根据文件的后缀名去进行分类,并将他们移动到特定的文件夹当中,对于比较懒的我来说自然是想找个法子来偷懒的,刚好对于学过Java的人来说,简单的做几个File的操作就可以将文件移动了。
关键API
File
exists()、list()、mkdirs()、delete()、renameTo()
- exists:用来判断该路径下文件或目录是否存在,返回值为boolean
- list:用来返回该路径下目录下的所有文件,返回值为String[]字符串数组
- mkdirs:创建一个目录,不管该路径下目录的父级是否存在,返回值为boolean
- renameTo:用来重命名该路径下的文件或目录,在本次工具中起到了移动的作用,返回值boolean
- delete:删除该路径下的文件或目录
逻辑分析:
提示:这里主要是对整个程序的一个逻辑分析:
- 首先我们先需要定义好需要整理的文件夹以及移动后的目标文件夹和文件后缀名
String oldPath = "C:\send"; String newPath = "C:\receive"; File oldFile = new File(oldPath); File newFile = new File(newPath); //需要移动文件的后缀 String suffix = ".xml";
- 对定义的需要整理的文件夹进行判断是否存在,如果存在则进行后续操作,不存在就结束了。当然需要移动到的目标路径方面也要做一点操作
if (oldFile.exists()) { //如果目的路径不存在,就创建一个 if (!newFile.exists()) { newFile.mkdirs(); } //…… }else { //没找到旧路径的操作 }
- 获取整个文件夹下的所有文件,通过返回得到的数组进行文件名的遍历,通过比对后缀名然后进行文件的移动
//oldFiles数组存放的是源文件夹中所有的文件名称 //newFiles数组放的是目标文件所有文件的名称 String[] oldFiles = oldFile.list(); String[] newFiles = newFile.list(); //用于记录移动了多少个文件 int count = 0; for (int i = 0; i < oldFiles.length; i++) { int foot = oldFiles[i].length(); int front = foot - suffix.length(); if (front > 0) { //筛选满足文件后缀名的文件 if (suffix.equals(oldFiles[i].substring(front, foot))) { for (int j = 0; j < newFiles.length; j++) { if (oldFiles[i].equals(newFiles[j])) System.out.println(newPath + newFiles[j] + "已更新:" + new File(newPath + "\" + newFiles[j]).delete()); } new File(oldPath + "\" + oldFiles[i]).renameTo(new File(newPath + "\" + oldFiles[i])); count++; } } } System.out.println("文件移动成功n" + oldPath + "目录下的" + suffix + "文件已经移动到了" + newPath + "n一共转移文件" + count + "个");
完整代码:
提示:该部分为整个方法的完整代码:
public static void moveFile() { //文件旧路径 String oldPath = "C:\send"; //文件目标路径 String newPath = "C:\receive"; File oldFile = new File(oldPath); File newFile = new File(newPath); //需要移动文件的后缀 String suffix = ".xml"; if (oldFile.exists()) { //如果目标路径不存在,就创建一个 if (!newFile.exists()) { newFile.mkdirs(); } //oldFiles数组存放的是源文件夹中所有的文件名称 //newFiles数组放的是目标文件所有文件的名称 String[] oldFiles = oldFile.list(); String[] newFiles = newFile.list(); //用于记录移动了多少个文件 int count = 0; for (int i = 0; i < oldFiles.length; i++) { int foot = oldFiles[i].length(); int front = foot - suffix.length(); if (front > 0) { //筛选满足文件后缀名的文件 if (suffix.equals(oldFiles[i].substring(front, foot))) { for (int j = 0; j < newFiles.length; j++) { if (oldFiles[i].equals(newFiles[j])) System.out.println(newPath + newFiles[j] + "已更新:" + new File(newPath + "\" + newFiles[j]).delete()); } new File(oldPath + "\" + oldFiles[i]).renameTo(new File(newPath + "\" + oldFiles[i])); count++; } } } System.out.println("文件移动成功n" + oldPath + "目录下的" + suffix + "文件已经移动到了" + newPath + "n一共转移文件" + count + "个"); } else { System.out.println("文件移动失败,初始路径不存在"); } }