需求:根据文件夹中文件的数量将少于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;
}
}