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 }