1 package com.readme;
2
3 import java.io.BufferedWriter;
4 import java.io.File;
5 import java.io.FileWriter;
6 import java.io.IOException;
7 import java.text.SimpleDateFormat;
8 import java.util.Date;
9 import java.util.Scanner;
10
11 /**
12 * @author lisj
13 * 用字符流实现每个文件夹中创建包含所有文件信息的readme.txt
14 *
15 */
16 public class FileNews {
17
18 static int i=0; //定义文件个数全局变量
19 public static void main(String args[]) throws IOException{
20
21 find(); //调用查找文件函数
22 System.out.println("共有"+i+"个文件! ");
23
24 }
25
26
27 /**
28 * find()函数实现目录参数的传递
29 * 在此方法中调用写文件信息函数
30 */
31 private static void find() throws IOException {
32
33 Scanner scanner=new Scanner(System.in);
34 System.out.println("请输入目录(输入end退出程序):");
35 String findpath=scanner.next(); //输入路径
36
37
38 File file=new File(findpath);
39
40 if(!file.exists()||!file.isDirectory()){ //判断该路径是否存在,是否是目录
41
42 if(findpath.equals("end")) //结束判断条件
43 {
44 System.out.println("程序结束,感谢使用!");
45 System.exit(-1);
46 }
47 else //输入错误,重新输入
48 {
49 System.out.println("输入的路径不存在,请重新输入!(输入end退出程序)");
50 find(); //递归调用
51 }
52
53 }
54
55 lookup(file); //调用判断文件,写文件信息函数
56
57 }
58
59
60
61 /**
62 * lookup()函数实现目标目录下文件和文件夹的判别
63 * 在此方法中实现写入文件信息到readme.txt
64 */
65 public static void lookup(File file) throws IOException{
66
67 String read=file.getAbsolutePath();
68 File readfileexist=new File(read+"/"+"readme.txt");
69 if(readfileexist.exists()){ //如果已经存在readme.txt,则删除
70 readfileexist.delete();
71 }
72
73 File[] names=file.listFiles(); //输入的路径下的文件的目录
74
75 BufferedWriter out=null; //定义字符输出流
76
77 //查找到的文件属性数组的初始化
78 if(names!=null){
79
80 for(File name:names){ //遍历输入的路径下的文件和文件夹
81
82 if(name.isFile()) //判断该路径下是文件
83 {
84
85 //定义文件时间属性
86 Date date=new Date(name.lastModified());
87 SimpleDateFormat simpledate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
88
89 String laststr = name.getParent();
90 File readfile=new File(laststr+"/"+"readme.txt"); //定义字符流写入的路径和文件名
91
92 out = new BufferedWriter(new FileWriter(readfile,true)); //定义字符流可追加写入信息
93
94 out.write("名字:"+name.getName()+" "); //写入文件信息
95 out.newLine();
96 out.write("大小:"+name.length()+" 字节");
97 out.newLine();
98 out.write("时间:"+simpledate.format(date)+" ");
99 out.newLine();
100 out.newLine();
101 out.flush(); //刷新缓冲以及关闭流
102 out.close();
103 i++; //统计文件个数
104
105 }
106 else
107 {
108 lookup(name);//递归调用函数
109 }
110 }
111
112 }
113
114 }
115
116 }