标签:类构造 rgs main imp 遍历 文件过滤器 绝对路径 一起 files
一 File类简介
Output:把内存数据存储到持久化设备上的动作称为输出(写)Output操作
Input: 把持久设备上的数据读取到内存中的动作称为输入(读)Input操作
IO: 输入和输出动作称为IO操作
File类:文件和目录路径名的抽象表示形式,Java中把文件或者目录(文件夹)都封装成File对象,要操作硬盘上的文件或文件夹,只要找到File这个类即可。
文件:file
目录:directory
路径:path
二 File类方法
File类静态成员变量:
pathSeparator:与系统有关的路径分隔符,为了方便,它被表示为一个字符串
separator:与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串
public class FileDemo { public static void main(String[] args) { //File类静态成员变量 //与系统有关的路径分隔符 String separator = File.pathSeparator; System.out.println(separator);// 是一个分号,目录的分割(window中环境变量配置各个路径用分号分割,表示一个完整的路径结束) Linux中是冒号 : //与系统有关的默认名称分隔符 separator = File.separator; System.out.println(separator);// 向右 \ 目录名称分割 Linux / } }
File类构造方法:
File(String pathname);将给定路径名字符串转换成File对象,这样才可以使用File类中的方法
File(String parent, String child);根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 对象
File(File parent, String child); 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 对象
windows中的路径或文件名不区分大小写
绝对路径:是一个固定的路径,从盘符开始,在系统中具有唯一性
相对路径:相对于某个位置,表示路径之间的关系,在Eclipse下是指当前项目下
String pathName = "e:\\java_code\\hello.java"; File f1 = new File(pathName);//将hello.java文件封装成File对象 /* * File(File parent,String child) * 好处: 父路径是File类型,父路径可以直接调用File类方法 */ public static void function_2(){ File parent = new File("d:"); File file = new File(parent,"eclipse"); System.out.println(file); } /* * File(String parent,String child) * 好处: 单独操作父路径和子路径 */ public static void function_1(){ File file = new File("d:","eclipse"); System.out.println(file); }
File类的获取功能:
String getPath();将抽象路径转为路径名字符串
String getName();获取路径中的文件或文件加名称
long length();获取文件字节大小
String getAbsolutePath();获取绝对路径,返回String对象
File getAbsoluteFile();获取绝对路径,返回File对象
String getParent();获取父路径,返回String对象
File getParentFile();获取父路径,返回File对象
//eclipse环境中,写相对路径,绝对路径是工程根目录
File类创建文件和目录:
boolean createNewFile();创建空文件,如果已存在同名文件则创建失败
boolean file.mkdir();创建文件夹,如果已存在则创建失败
boolean file.mkdirs();创建多级文件夹,如果父文件夹不存在,会同时创建父文件夹
boolean file.exists();判断文件是否存在
boolean file.isFlie();判断是否是文件
boolean file.isDirectory();判断是否是文件夹
boolean file.delete();删除文件或文件夹,不进回收站,慎用。删除文件夹时,如果文件夹中有内容,无法直接删除
File类list()遍历:
String[] list():获取路径中的文件和文件夹名 (遍历一个目录),返回包含名字的String数组
File[] listFiles():获取路径中的文件和文件夹名(遍历一个目录),返回包含文件或目录全路径的File数组
static File[] listRoots(): 获取系统中的所有根目录
File dir = new File("e:\\java_code"); //获取的是目录下的当前的文件以及文件夹的名称。 String[] names = dir.list(); for(String name : names){ System.out.println(name); } //获取目录下当前文件以及文件对象,只要拿到了文件对象,那么就可以获取其中想要的信息 File[] fileArr = dir.listFiles(); for(File file : fileArr){ System.out.println(file); }
三 FilenameFilter、FileFilter过滤器
作用:过滤一个目录下指定扩展名的文件,或包含某些关键字的文件夹
FilenameFilter过滤器:
String[] list(FilenameFilter filter);返回满足指定过滤器的文件和文件夹,返回的是文件/文件夹名String数组
boolean accept(File dir, String name);测试指定文件是否包含在某一文件列表中
FileFilter过滤器:
File[] listFiles(FileFilter filter);返回满足指定过滤器的文件和文件夹,返回的是抽象路径名File数组
boolean accept(File pathname);测试指定抽象路径名是否包含在某个路径列表中
FilenameFilter过滤器中的accept方法接受两个参数,一个当前文件或文件夹所在的路径,一个是当前文件或文件夹对象的名称。
FileFilter过滤器中的accept方法接受一个参数,是当前文件或文件夹对象。
FileFilter可以看做是FilenameFilter的功能加强,提供了文件对象的访问方法。
用FilenameFilter搜索特定文件扩展名,结果会难以判断到底是文件夹还是文件。
例如,文件夹下包含文件夹:txt,文件:xxx.txt,accept方法中return name.endsWith("txt");就会连文件夹txt一起返回。
另外,listFiles(FilenameFilter filter)先用字符串匹配,匹配成功后创建File对象。
而listFiles(FileFilter filter)先创建File对象,然后使用File对象进行匹配。
所以,如果不对文件进行操作,listFiles(FilenameFilter filter)效率更高。
如果需要对文件进行操作,则需要使用listFiles(FileFilter filter)。
文件过滤器原理:
1 listFiles()遍历目录的同时,获取到了文件名全路径,
2 调用过滤器的方法accept,将获取到的路径传递给accept方法的参数pathname,accept方法接收了listFiles传递来的参数pathname进行判断,如果这个路径是Java文件,返回true,否则返回false。
3 一旦方法返回true,listFiles将路径保存到File数组中。
public class FileDemo { public static void main(String[] args) { //获取扩展名为.java所有文件 File file = new File("E:\\新建文件夹"); File[] files = file.listFiles(new MyFileFilter()); for (File f : files) { System.out.println(f); } } } //自定类继承FilenameFilter过滤器接口 class MyFileFilter implements FilenameFilter{ public boolean accept(File dir, String name) { return name.endsWith(".java"); } }
四 递归遍历文件夹、递归搜索指定文件
public class FileDemo { public static void main(String[] args) { File dir = new File("d:\\新建文件夹"); getAllDir(dir); System.out.println("-----"); getAllFile(dir); } public static void getAllDir(File dir){ System.out.println(dir); File[] fileArr = dir.listFiles(); for(File f : fileArr){ if(f.isDirectory()){ getAllDir(f); }else{ System.out.println(f); } } } public static void getAllFile(File file) { File[] files = file.listFiles(new MyFileFilter()); for (File f : files) { if(f.isDirectory()){ getAllFile(f); }else{ System.out.println(f); } } } } class MyFileFilter implements FilenameFilter{ public boolean accept(File dir, String name) { return name.endsWith(".txt"); } }
标签:类构造 rgs main imp 遍历 文件过滤器 绝对路径 一起 files
原文地址:https://www.cnblogs.com/createtable/p/10548908.html