- File类在java.io包下,是文件和目录(文件夹)的路径名的抽象表示,主要用于创建、获取、删除文件/文件夹,判断文件/文件夹是否存在,对文件夹进行遍历,获取文件的大小等操作。
- File类与操作系统无关,任何操作系统都可以使用类中的方法。
- 绝对路径与相对路径:绝对路径是一个完整的路径,以盘符开始的路径;相对路径是一个简化的路径,相对指的是相对于当前项目的根目录。路径不区分大小写,但Windows系统文件名称分隔符“/”是转义字符,需要用两个“//”来表示。
- static String pathSeparator():与操作系统有关的路径分隔符,为了方便,它被表示为一个字符(Windows:“;”,Linux:“:”)
- static char pathSeparatorChar():与操作系统有关的路径分隔符
- static String separator():与操作系统有关的文件名称分隔符,为了方便,它被表示为一个字符(Windows:“”,Linux:“/”)
- static char separator():与操作系统有关的文件名称分隔符
- 注意事项:文件路径不能写死,因为文件名称分隔符不是固定的,与操作系统有关
- File(String pathname):通过给定路径创建一个新File实例,路径可以以文件结尾,也可以以文件夹结尾;路径可以是相对路径,也可以是绝对路径;路径可以是存在的,也可以是不存在的(创建File对象,只把字符串路径封装为File对象,不考虑路径的真假情况);
- File(String parentpathname, String childpathname):根据父路径和子路径名字创建一个新的File实例;好处:父路径和子路径单独书写,使用起来非常灵活,父路径和子路径都可以变化;
- File(File parentfile, String childpathname):parentfile是File类型,可以使用File类的方法对路径进行一些操作,再通过路径创建File对象。
注意:
- 无论File构造方法中传递的是相对还是绝对路径,getAbsolutePath()方法输出的都是绝对路径;
- getPath()方法输出的是构造方法中传递的路径,是相对就返回相对,是绝对就返回绝对;
- toString()方法调用的是getPath()方法;
- length()方法是以字节为单位的;文件夹没有大小概念,length()方法不能获取文件夹的大小,获取后返回值为0;
- 如果构造方法给出的路径不存在,length()方法返回0。
注意:isDirectory()和isFile()两个方法是互斥的,要么是文件,要么是文件夹,这两个方法的使用前提是路径必须是存在的,否则都返回false。
6.File类的创建删除方法注意:
- createNewFile()方法如果文件不存在,创建成功,会返回true,如果存在,创建不成功,会返回false;只能创建文件,不能创建文件夹;创建文件的路径必须存在,否则会报异常。
- mkdirs()方法既可以创建单级文件夹,又能创建多级文件夹;mkdir()方法只能创建单级文件夹,不能创建多级文件夹,如要创建多级文件夹,则返回false;mkdir()、mkdirs()方法和createNewFile()类似,如果文件夹不存在,创建成功,会返回true,如果存在,创建不成功,会返回false;只能创建文件夹,不能创建文件,如非要传一个文件,则创建为一个文件夹;多用mkdirs()方法。
- delete()可以删除构造方法给出的路径,可以删除文件或文件夹,若文件/文件夹删除成功返回true;若文件夹中有内容不会被删除,构造方法中的路径不存在,也会返回false;delete方法直接从硬盘删除文件/文件夹,不经过回收站,因此删除需谨慎。
注意:
- 如果构造方法给出的目录路径不存在,会抛出空指针异常;
- 如果构造方法给出的是文件,而不是文件夹,会抛出空指针异常;
- list()方法会遍历目录路径下的所有文件/文件夹,获取文件/文件夹的名称,把获取到的名称存储到String类型的数组中;
- listFiles()方法会遍历目录路径下的所有文件/文件夹,把文件/文件夹封装为多个File对象,存储到File类型的数组中;
- 隐藏的文件/文件夹也能获取到。
- 定义:在当前方法内调用自己的这种现象就叫递归;
- 使用前提:当调用方法的时候,方法的主体不变,每次调用方法的参数不同,可以使用递归;
- 分为两种:直接递归(方法自己调用自己)、间接递归(A调用B,B调用C,C调用A);
- 注意:递归一定要有限制条件,保证递归能够停下来,否则会发生栈内存溢出;即使递归中有限制条件,也不能有太多次递归,否则也会发生栈内存溢出;构造方法禁止递归。
- 栈内存溢出的原因:方法一直调用该方法,会导致栈中有无数个该方法,方法太多,超过了栈内存的大小,就会导致栈内存溢出的错误。栈内存大小会一直变化,没有具体的大小。
- 构造方法编译报错的原因:构造方法用来创建对象,一直递归会导致内存中有无数多个对象,直接编译报错。
- 递归能不用就不用,频繁的创建方法、调用方法、销毁方法,效率低下。
- 案例:递归打印多级目录、文件搜索。
- 在File类中有两个listFiles()重载的方法,方法参数传递的是过滤器,分别是:
- File[] listFiles(FileFilter filter),FileFilter接口用于过滤File对象,FileFilter有唯一一个抽象方法boolean accept(File pathname)
- File[] listFiles(FilenameFilter filter),用于过滤文件名称,FilenameFilter有唯一一个抽象方法boolean accept(File dir, String name)
- 注意:两个过滤器接口(FileFilter和FilenameFilter)没有实现类,需要重写实现类的抽象方法accept(),在方法中定义过滤的规则。



