需求:根据文件夹中文件的数量将少于10个文件的文件夹置于一个文件夹中,其他的置于另一个文件夹中
import java.io.*; /** * @author wwd8678 * @date 2018/5/23 */ public class CopyFile { /** * FILE_PATH 需分类文件的目录 */ private static final String FILE_PATH = PropertiesUtils.getProperty("file_path"); /** * OUT_PATH_FEW 存放小于规定个文件的地址 */ private static final String OUT_PATH_FEW = PropertiesUtils.getProperty("few_path"); /** * OUT_PATH_MORE 存放多大于规定个文件的地址 */ private static final String OUT_PATH_MORE = PropertiesUtils.getProperty("more_path"); /** * FILE_NUMBER 归类数量 */ private static final int FILE_NUMBER = Integer.parseInt(PropertiesUtils.getProperty("file_number")); public static void main(String args[]) throws IOException { // 创建目标文件夹 (new File(OUT_PATH_FEW)).mkdirs(); System.out.println("新建文件夹 " + OUT_PATH_FEW + " 成功"); (new File(OUT_PATH_MORE)).mkdirs(); System.out.println("新建文件夹 " + OUT_PATH_MORE + " 成功"); // 获取源文件夹当前下的文件或目录 File[] file = (new File(FILE_PATH)).listFiles(); System.out.println("开始遍历文件夹 " + FILE_PATH); for (int i = 0; i < file.length; i++) { File[] file1 = new File[i]; for (int j= 0 ;j< file1.length;j++){ System.out.println("-----------------------------------"); //判断文件内容是否大于规定个数的文件 if (traverseFolder(file[j].getAbsolutePath()) > FILE_NUMBER) { // 复制文件 if (file1[j].isFile()) { copyFile(file1[j], new File(OUT_PATH_MORE + file1[j].getName())); } // 复制目录 if (file1[j].isDirectory()) { String sourceDir = FILE_PATH + File.separator + file1[j].getName(); String targetDir = OUT_PATH_MORE + File.separator + file1[j].getName(); copyDirectiory(sourceDir, targetDir); } } else { // 复制文件 if (file1[j].isFile()) { copyFile(file1[j], new File(OUT_PATH_FEW + file1[j].getName())); } // 复制目录 if (file1[j].isDirectory()) { String sourceDir = FILE_PATH + File.separator + file1[j].getName(); String targetDir = OUT_PATH_FEW + File.separator + file1[j].getName(); copyDirectiory(sourceDir, targetDir); } } } } } // 复制文件 public static void copyFile(File sourceFile, File targetFile) throws IOException { BufferedInputStream inBuff = null; BufferedOutputStream outBuff = null; try { inBuff = new BufferedInputStream(new FileInputStream(sourceFile)); outBuff = new BufferedOutputStream(new FileOutputStream(targetFile)); byte[] b = new byte[1024 * 5]; int len; while ((len = inBuff.read(b)) != -1) { outBuff.write(b, 0, len); } outBuff.flush(); System.out.println("正在复制文件:" + targetFile); } finally { if (inBuff != null) { inBuff.close(); } if (outBuff != null) { outBuff.close(); } } } // 复制文件夹 public static void copyDirectiory(String sourceDir, String targetDir) throws IOException { (new File(targetDir)).mkdirs(); File[] file = (new File(sourceDir)).listFiles(); for (int i = 0; i < file.length; i++) { if (file[i].isFile()) { File sourceFile = file[i]; File targetFile = new File(new File(targetDir).getAbsolutePath() + File.separator + file[i].getName()); copyFile(sourceFile, targetFile);//递归调用 } if (file[i].isDirectory()) { String dir1 = sourceDir + "/" + file[i].getName(); String dir2 = targetDir + "/" + file[i].getName(); copyDirectiory(dir1, dir2); } } } //判断文件数量 public static int traverseFolder(String path) { int fileNum = 0; File file = new File(path); File[] files = file.listFiles(); for (File file2 : files) { if (file2.isDirectory()) { System.out.println("正在遍历文件夹:" + file2.getAbsolutePath()); traverseFolder(file2.getAbsolutePath()); } else { System.out.println("正在遍历文件:" + file2.getAbsolutePath()); fileNum++; } } System.out.println("文件数量:" + fileNum); System.out.println("开始复制文件"); return fileNum; } }