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 }