1 File类
1.1 概述
java.io.file 类是文件和目录的路径名的抽象表示,主要用于文件和目录的创建,查找和删除等操作。
1.2 构造方法
- public File(string pathname) :通过将给定的路径名称字符串转换为抽象路径名来创建新的File实例。
- public File(string parent,string child):从父路径名字符串和子路径名创建新的File实例
- public File(File parent,stirng child):从抽象路径名和子路径名字符串创建新的File实例
- 构造举例:
//字符串文件路径名String pathname = "D:fenglinaaa.txt";File file = new File(pathname);//父路径字符串和子路径字符串String parent = "D:fenglin";String child = "bbb.txt";File file1 = new File(parent,child);//父抽象路径和子路径字符串File parentFile = new File("D:fenglin");String child1 = "ccc.txt";File file2 = new File(parentFile,child1);
注意:
1、一个File对象代表硬盘中实际存在的一个文件或目录
2、无论该路径下是否存在文件或者目录,都不影响File对象的创建
1.3 常用方法
- public string getAbsolutePath():返回此File的绝对路径名称字符串
- public string getPath():返回此File的路径名称字符串
- public string getName():返回此File的文件或目录名称
- public long length():返回此File表示的文件的长度
1.3.1 获取判断功能的方法
public boolean exists ():此File表示的文件或目录的是否实际存在public boolean isDirectory():此File表示的是否是目录public boolean isFile():此File表示的是否是文件
1.3.2 创建、删除功能的方法
public boolean createNewFile():当且仅当具有该名称的文件不存在时,创建一个新的空文件public boolean delete():删除由此File表示的文件或者目录public boolean mkdir():创建由此File表示的目录public boolean mkdirs():创建此File表示的目录,包括任何必需但不存在的父目录
1.4 目录的遍历
- public String[] list():返回一个string数组,表示该File目录中的所有子文件和目录
- public File[] listFiles():返回一个file数组,表示该File目录中的所有子文件或目录
2.1 概述
- 递归:指当前方法内调用自己的这种现象
- 递归的分类:
- 递归分为两种:直接递归和间接递归
- 直接递归:方法自身调用自己
- 间接递归:可以A方法调用B方法,B方法调用C方法,C方法调用A方法
- 注意事项:
- 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出
- 在递归中虽然有限定条件,但是递归次数不能太多,否则也会发生栈内存溢出
- 构造方法,禁止递归
2.2 递归累加求和
@Testpublic void test() throws IOException { int num = 5; System.out.println(getSum(num));}public static int getSum(int num){ if(num == 1){ return 1; } return num + getSum(num -1);}
2.3 递归求阶乘
- 所有小于及等于该数的正整数的积;
- n!:n*(n-1)*...*3*2*1;
@Testpublic void test() throws IOException { int num = 5; System.out.println(getSum(num));}public static int getSum(int num){ if(num == 1){ return 1; } return num * getSum(num -1);}
3 文件过滤器优化
Java.io.FileFilter是一个接口,是File的过滤器。该接口的对象可以传递给File类的listFiles(Filefilter)作为参数,接口中只有一个方法
- public accept(File pathname):测试pathname是否应该包含在当前file目录中,符合则返回true
- 分析
- 接口作为参数,需要传递子类对象,重写其中方法,选择匿名内部类方式,比较简单
- accept方法,参数为File,表示当前目录的子文件或子目录,保留住则返回true,过滤返回false
- 过滤器作用:listFiles(FileFilter)返回的数组元素中,子文件对象都是符合条件的,可以直接打印。
- 代码:
public class DiGuiDemo4 {public static void main(String[] args) {File dir = new File("D:aaa");printDir2(dir);}public static void printDir2(File dir) {// 匿名内部类方式,创建过滤器子类对象File[] files = dir.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".java")||pathname.isDirectory(); }});// 循环打印for (File file : files) {if (file.isFile()) {System.out.println("文件名:" + file.getAbsolutePath());} else {printDir2(file);}}}}