IO流只能用来操作数据,不能对文件或文件夹进行操作,这时要用File类。
File类:
1.用来将文件或者文件夹封装成对象
2.方便对文件与文件夹的属性进行操作
3.File对象可以作为参数传递给流的构造函数
可以将一个已存在或者不存在的文件封装成目录。
File file1=new File("c:\\a.txt");
File file2=new File("c:\\","a.txt");
File f=new File("c:\\");
File file3=new File(f,"a.txt");
1 /* 2 * 3 * 获取指定目录下,指定扩展名的文件(包含子目录中的) 4 * 这些文件的绝对路径写入到一个文本文件中。 5 * 6 * 简单说,就是建立一个指定扩展名的文件的列表。 7 * 8 * 思路: 9 * 1,必须进行深度遍历。10 * 2,要在遍历的过程中进行过滤。将符合条件的内容都存储到容器中。11 * 3,对容器中的内容进行遍历并将绝对路径写入到文件中。 12 * 13 *14 */15 public class Test {16 17 /**18 * @param args19 * @throws IOException 20 */21 public static void main(String[] args) throws IOException {22 23 File dir = new File("e:\\java0331");24 25 FilenameFilter filter = new FilenameFilter(){26 @Override27 public boolean accept(File dir, String name) {28 29 return name.endsWith(".java");30 } 31 };32 33 Listlist = new ArrayList ();34 35 getFiles(dir,filter,list);36 37 File destFile = new File(dir,"javalist.txt");38 39 write2File(list,destFile);40 41 }42 /**43 * 对指定目录中的内容进行深度遍历,并按照指定过滤器,进行过滤,44 * 将过滤后的内容存储到指定容器List中。45 * @param dir46 * @param filter47 * @param list48 */49 public static void getFiles(File dir,FilenameFilter filter,List list){50 51 File[] files = dir.listFiles();52 53 for(File file : files){54 if(file.isDirectory()){55 //递归啦!56 getFiles(file,filter,list);57 }else{58 //对遍历到的文件进行过滤器的过滤。将符合条件File对象,存储到List集合中。 59 if(filter.accept(dir, file.getName())){60 list.add(file);61 }62 }63 }64 65 }66 67 public static void write2File(List list,File destFile)throws IOException{68 69 BufferedWriter bufw = null;70 try {71 bufw = new BufferedWriter(new FileWriter(destFile));72 for(File file : list){73 bufw.write(file.getAbsolutePath());74 bufw.newLine();75 bufw.flush();76 }77 78 79 } /*catch(IOException e){80 81 throw new RuntimeException("写入失败");82 }*/finally{83 if(bufw!=null)84 try {85 bufw.close();86 } catch (IOException e) {87 88 throw new RuntimeException("关闭失败");89 }90 }91 }92 93 }