1 package com.filetest; 2 3 import java.io.File; 4 import java.util.Date; 5 import java.util.Scanner; 6 7 public class findfile { 8 9 public static void main(String args[]){ 10 11 find(); //调用查找函数 12 13 } 14 15 private static void find() { 16 17 Scanner scanner=new Scanner(System.in); 18 System.out.println("请输入文件名:"); 19 String filename=scanner.next(); //输入要查找的文件名 20 21 System.out.println("请输入目录(输入end退出程序):"); 22 String findpath=scanner.next(); //输入路径 23 24 File file=new File(findpath); 25 26 if(!file.exists()||!file.isDirectory()){ //判断该路径是否存在,是否是目录 27 28 if(findpath.equals("end")) //结束判断条件 29 { 30 System.out.println("程序结束,感谢使用!"); 31 System.exit(-1); 32 } 33 else //输入错误,重新输入 34 { 35 System.out.println("输入的路径不存在,请重新输入!(输入end退出程序)"); 36 find(); //递归调用 37 } 38 39 } 40 41 String[] names=file.list(); //输入的路径下的文件或目录 42 43 int i=0; //定义数组长度变量 44 int t=0; 45 46 //查找到的文件属性数组的初始化 47 String[] findname=new String[100]; 48 long[] sizefile=new long[100]; 49 String[] timefile=new String[100]; 50 51 //查找到的目录属性数组的初始化 52 String[] findDirectory=new String[100]; 53 long[] sizeDirectory=new long[100]; 54 String[] timeDirectory=new String[100]; 55 56 for(String name:names){ //遍历输入的路径下的文件和文件夹 57 58 File files=new File(findpath+"\"+name); 59 60 if(files.isFile()) //判断该路径下是文件还是目录 61 { 62 63 if(name.contains(filename)){ //判断文件名字是否包含输入的文件名,如果包含则输出属性(名字,大小,时间) 64 findname[i]=files.getName(); 65 sizefile[i]=files.length(); 66 Date date=new Date(files.lastModified()); 67 timefile[i]=date.toString(); 68 i++; 69 } 70 } 71 else 72 { 73 if(name.contains(filename)){ //判断目录名字是否包含输入的文件名,如果包含则输出属性(名字,大小,时间) 74 findDirectory[t]=files.getName(); 75 try { 76 sizeDirectory[t]=getFileSize(files); 77 } catch (Exception e) { 78 e.printStackTrace(); 79 } 80 Date date=new Date(files.lastModified()); 81 timeDirectory[t]=date.toString(); 82 t++; 83 } 84 } 85 86 } 87 88 89 90 if(i!=0){ //文件数组不为空,查找到文件名字有包含输入的文件名,输出文件的名字和属性 91 System.out.println("该目录下发现"+(i)+"个文件与您输入的名字类似,列表如下:"); 92 for(int x=0;x<i;x++){ 93 System.out.println("文件名: "+findname[x]); 94 System.out.println("文件大小: "+sizefile[x]+"字节"); 95 System.out.println("最后修改时间:"+timefile[x]); 96 System.out.println(); 97 } 98 System.out.println(); 99 } 100 101 102 if(t!=0){ //目录数组不为空,查找到目录名字有包含输入的文件名,输出目录的名字和属性 103 System.out.println("该目录下发现"+(t)+"个文件夹与您输入的名字类似,列表如下:"); 104 for(int x=0;x<t;x++){ 105 System.out.println("文件名: "+findDirectory[x]); 106 System.out.println("文件大小: "+sizeDirectory[x]+"字节"); 107 System.out.println("最后修改时间:"+timeDirectory[x]); 108 System.out.println(); 109 } 110 System.out.println(); 111 } 112 113 if(i==0&&t==0){ //未找到包含输入的文件名的文件和目录 114 System.out.println("未发现你要查询的文件,程序结束,感谢使用!"); 115 System.exit(-1); 116 } 117 } 118 119 public static long getFileSize(File f) throws Exception //递归计算文件夹的大小 120 { 121 long size=0; 122 File flist[]=f.listFiles(); 123 for(int i=0;i<flist.length;i++){ 124 if(flist[i].isDirectory()){ 125 size=size+getFileSize(flist[i]); 126 }else 127 { 128 size=size+flist[i].length(); 129 } 130 } 131 132 return size; 133 } 134 135 136 137 }