首先引用Thinking in Java中的一段话:
在学习那些真正用于在流中用来读取数据的类之前,我们先来看一下一个实用类库工具,他可以帮助处理文件目录问题。
File类这个名字有一定的误导性,我们可能以为它指代的是一个文件,实际上却并非如此,它既能代表一个特定文件的名称,又能代表一个目录下一组文件的名称。 实际上File就是文件和路径的抽象表示
创建一个File对象前,我们先看一下构造方法:
File(File parent,String child) 从父抽象路径名和子路径名字符串创建新的 File实例。 File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。 File(String parent,String child) 从父路径名字符串和子路径名字符串创建新的 File实例。 File(url r) 通过将给定的 file: URI转换为抽象路径名来创建新的 File实例 构造方法中参数的表示: **假设D盘下的有一个文件夹www,该文件夹下还有一个文件夹baidu** 那么我们就可以用三种构造方法来创建File对象 方法1:File file = new File("D:\\www\\baidu"); 方法2:File file2 = new File("D:\\www","baidu"); 方法3:File file31 = new File("D:\\www"); File file3 = new File(file31,"baidu"); 因此file\file2\file3指定的抽象路径是一样的!File类的常用方法
//假设我的D盘下有一个文件夹www,而www文件夹下有一个abc.txt File file = new File("D:\\www\\abc.txt"); System.out.println("判断文件是否存在: "+file.exists()); //true System.out.println("getAbsolutePath返回此抽象路径名的绝对路径名字符串:"+file.getAbsolutePath()); //D:\www\bin.txt System.out.println("getCanonicalPsth返回此抽象路径名的规范路径名字符串:"+file.getCanonicalPath());//D:\www\bin.txt System.out.println("getPath将此抽象路径名转换为路径名字符串。:"+file.getPath());//D:\www\bin.txt System.out.println("getParent获取文件父类的路径:"+file.getParent()); //D:\www System.out.println("getName获取文件或路径的名称 : "+file.getName()); //bin.txt System.out.println("判断是否为文件: "+file.isFile()); //true System.out.println("判断是否为目录: "+file.isDirectory()); //false String[] s = file.list(); //返回file抽象路径下的目录和文件,返回的是一个字符串数组 File[] fi = file.listFiles(); //返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。 String ss = file.toString(); //返回该File对象的字符串表示形式使用File来遍历目录文件夹
//遍历D盘下的www目录 import java.io.*; public class Text { public static void main(String[] args) throws Exception { File f = new File("D:\\www"); read(f); //调用方法遍历出D:\\www文件夹下的目录 } public static void read(File file) { File[] fi = file.listFiles(); for(File f:fi) { if(f.isDirectory()) { read(f); //如果不是文件则遍历 }else { System.out.println(f.getName()); } } } }文件过滤
方法1:遍历的同时进行判断
//找出D:\\www下的.jpg文件 import java.io.*; public class Text { public static void main(String[] args) throws Exception { File f = new File("D:\\www"); read(f); } public static void read(File file) { File[] fi = file.listFiles(); for(File f:fi) { if(f.isDirectory()) { read(f); }else { if(f.getName().endsWith(".jpg")) { System.out.println(f.getName()); } } } } }方法2:实现接口FileFilter接口
import java.io.*; public class Text { public static void main(String[] args) throws Exception { File f = new File("D:\\www"); read(f); } public static void read(File file) { File[] fi = file.listFiles(new FileFilter() { //实现FileFilter接口 @Override public boolean accept(File pathname) { if(pathname.isDirectory()) { read(pathname); } return pathname.getName().endsWith(".jpg"); } }); for(File f:fi) { System.out.println(f.getName()); } } }方法3:实现FileNameFilter,找出当前目录下的所有txt文件
import java.io.*; public class Text { public static void main(String[] args) throws Exception { File f = new File("D:\\www"); read(f); } public static void read(File file) { File[] fi = file.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.endsWith(".txt"); } }); for(File f : fi) { System.out.println(f.getName()); } } }