package JAVA做一个文件管理器; import java.io.*; import java.util.Scanner; public class FileUtils { public static void main(String[] args) throws IOException { /** * 复制文件夹或文件夹 */ // 源文件夹 String url1 = "f:/photos"; // 目标文件夹 String url2 = "d:/tempPhotos"; // 创建目标文件夹 (new File(url2)).mkdirs(); // 获取源文件夹当前下的文件或目录 File[] file = (new File(url1)).listFiles(); for (int i = 0; i < file.length; i++) { if (file[i].isFile()) { // 复制文件 copyFile(file[i],new File(url2+file[i].getName())); } if (file[i].isDirectory()) { // 复制目录 String sourceDir=url1+File.separator+file[i].getName(); String targetDir=url2+File.separator+file[i].getName(); copyDirectiory(sourceDir, targetDir); } } //输出语句(显示操作菜单) System.out.println("**********1.指定关键字搜索 2.指定后缀名搜索 3.文件/文件夹复制 4.退出***********************"); System.out.println("请输入对应的操作"); //创建一个键盘扫描器 Scanner sc = new Scanner(System.in); //接收用户的输入整数 int key = sc.nextInt(); //根据用户判断是哪一操作 //在等值比较的时候,优先考虑switch..case,但使用switch的时候一定要注意 //int char String 枚举 //byte short int char String 枚举 switch (key){ case 1: //TODO 根据关键字搜索文件 searchByKeyWorld(); break; case 2: //TODO 根据指定的后缀名搜索文件 searchByLastWord(); break; case 3: //TODO 文件/文件夹的复制 break; case 4: //退出 System.exit(0);//中止 break; default: System.out.println("操作错误,请输入正确指令"); break; } } private static void searchByLastWord() { //提醒用户输入需要搜索的目录 Scanner sc = new Scanner(System.in); System.out.println("请输入需要检索的目录:"); //再提醒用户输入需要搜索的后缀 String path = sc.nextLine(); System.out.println("请输入要检索的后缀"); String key = sc.nextLine(); File file = new File(path); //通过用户指定的目录去搜索后缀 listSuffix(file,key); //告诉用户是否搜索到文件 System.out.println("搜完了!"); } private static void listSuffix(File file, String key) { //获取当前目录所有File对象 File[] files = file.listFiles(); //把每一个file对象拿出来判断,首先判断是目录还是文件, //如果是目录则继续搜索,文件则判断是否包含关键字 for (File file2 :files) {//JDK1.8新推出集合流式Api处理 集合Lambda表达式效果更佳 //判断元素是否是后缀 String exegc ="^"+key+"$"; if (file2.isDirectory()){ listFile(file2,key); }else { if (file2.getName().endsWith(exegc)){ System.out.println(file2.getAbsolutePath()); } } } } private static void searchByKeyWorld() { //提醒用户输入需要搜索的目录 Scanner sc = new Scanner(System.in); System.out.println("请输入需要检索的目录:"); //再提醒用户输入需要搜索的关键字 String path = sc.nextLine(); System.out.println("请输入要检索的关键字"); String key = sc.nextLine(); File file = new File(path); //通过用户指定的目录去搜索指定关键字 listFile(file,key); //告诉用户是否搜索到文件 System.out.println("搜完了!"); } //具体搜索关键字的方法 private static void listFile(File file, String key) { //获取当前目录所有File对象 File[] files = file.listFiles(); //把每一个file对象拿出来判断,首先判断是目录还是文件, //如果是目录则继续搜索,文件则判断是否包含关键字 for (File file2 :files) {//JDK1.8新推出集合流式Api处理 集合Lambda表达式效果更佳 //判断元素是否是目录 if (file2.isDirectory()){ listFile(file2,key); }else { if (file2.getName().contains(key)){ System.out.println(file2.getAbsolutePath()); } } } } // 复制文件 public static void copyFile(File sourceFile,File targetFile) throws IOException{ // 新建文件输入流并对它进行缓冲 FileInputStream input = new FileInputStream(sourceFile); BufferedInputStream inBuff=new BufferedInputStream(input); // 新建文件输出流并对它进行缓冲 FileOutputStream output = new FileOutputStream(targetFile); BufferedOutputStream outBuff=new BufferedOutputStream(output); // 缓冲数组 byte[] b = new byte[1024 * 5]; int len; while ((len =inBuff.read(b)) != -1) { outBuff.write(b, 0, len); } // 刷新此缓冲的输出流 outBuff.flush(); //关闭流 inBuff.close(); outBuff.close(); output.close(); input.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); } } } }