File类概述:
该类将文件,文件夹,路径封装成对象,并提供相应方法来操作文件文件夹,路径。
两组静态成员:
static String pathSeparator 和 static char pathSeparatorChar 都是与系统相关的路径分隔符(一个路径与下一个路径的分隔)在 Windows下为 ; Linux下为 :
separator 和 separatorChar 表示与系统相关的名称分隔符。 Windows下为 \ Linux /
构造器:
最常用到的File(String pathname) 将指定的路径封装成一个对象(如果写相对路径它的默认根路径是本工程的绝对路径)如果参数为空串则默认表示工程根路径。
创建功能(创建目录创建文件):
- 创建目录:
- mkdir() 只能创建单级目录。(按你file对象的构造器中封装的路径来创建,如果你要新建一个多级目录那会创建失败但不会报错,如果目录已经存在时不会重新创建。当目录新建成功时返回true)。
- mkdirs()可以创建多级目录。
- 创建文件:createNewFile()用构造器中封装的路径来创建,无则创建。若成功创建则返回true。
删除功能(不经过回收站,这是直接删除):
- delete():立刻马上删除。
- deleteOnExit()延迟删除,JVM结束之前删除。
重命名功能:
renameTo(File dest)。如果发现路径变化了,则会带有剪切效果。
判断功能:
- exists()判断file对象中封装的路径是否存在。
- isDriectory()判断是否是文件夹(如果路径实体不存在会返回false)
- isFile()判断是否是文件(如果路径实体不存在会返回false)
- isAbsolute()判断构造器中封装的路径是否为绝对路径,注意:这个跟有没有这个路径没有关系。他只是判断路径写法是否为绝对路径的写法(带盘符)。
获取功能:
- String getName()获取此文件路径中表示的文件或路径名。底层也是通过切割字符串实现的。
- String getAbsolutePath()获取File构造器封装的路径的绝对路径
- File getAbsoluteFile()与上面的一样,只不过他将返回的绝对路径有封装成了一个file对象。方便链式调用
- long length()获取文件的字节数。
- String[] list()获取该对象表示的路径下的子路径。
- listFiles(FileFilter filter)带过滤器的获取,FileFilter是一个接口,java没有提供实现类。可自定义一个过滤器。
递归遍历和删除指定目录下的文件:
public class FileTest {
public static void main(String[] args) {
File file = new File("").getAbsoluteFile();
String ext = ".class";
getAllFile(file,ext);
System.out.println("======================================");
deleteAllFile(file,ext);
}
public static void getAllFile(File file, String ext) {
File[] fileList = file.listFiles();
for(File fileItem : fileList) {
if(fileItem.isFile()) {
if(fileItem.getName().endsWith(ext)) {
System.out.println("获取到文件:" + fileItem.getName());
}
}else {
getAllFile(fileItem, ext);
}
}
}
public static void deleteAllFile(File file, String ext) {
File[] fileList = file.listFiles();
for(File fileItem : fileList) {
if(fileItem.isFile()) {
if(fileItem.getName().endsWith(ext)) {
System.out.println("成功删除" + fileItem.getName());
}
}else {
deleteAllFile(fileItem, ext);
}
}
}
}
测试:
需要注意的是不可以完整遍历windows下的文件,会报空指针异常:
原因:JVM只是运行在windows系统上的一个软件。Winows将其视为外来程序,它不准外来程序来操作其核心内容。