概述
文件和目录路径名的抽象表示。
用户界面和操作系统使用依赖于系统的路径名字符串命名文件和目录。 这个类提供了一个抽象的,独立于系统的层次化路径名的视图。
/*
抽象路径名有两个组件:
可选的系统相关前缀字符串,例如用于UNIX根目录的磁盘驱动器说明符"/"或Microsoft Windows UNC路径名的"\\\" ,以及
零个或多个字符串名称的序列。
重点:
1、file:文件
2、directory:文件夹/目录
3、path:路径
*/
静态成员变量
-
pathSeparator,与系统相关的路径分隔符字符,为方便起见,表示为字符串。
-
pathSeparatorChar,与系统相关的路径分隔符。
-
separator,与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。
-
separatorChar,与系统相关的默认名称分隔符。
System.out.println(File.pathSeparator); // 路径分隔符 window:分号;linux:冒号 System.out.println(File.separator); // 文件名称分隔符 window:反斜杠;linux:正斜杠 System.out.println(File.pathSeparatorChar); System.out.println(File.separatorChar);
路径
-
绝对路径:完整的路径,以盘符开始的。如:c:\a.txt
-
相对路径:简化路径,相对于当前项目的根目录。如:\a.txt
// 注意:路径不区分大小写
构造方法
- File(File parent, String child),从父抽象路径名和子路径名字符串创建新的 File实例。
- File(String pathname),通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
- File(String parent, String child),从父路径名字符串和子路径名字符串创建新的 File实例。
- File(URI uri),通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。
获取功能的方法
- getAbsolutePath(),返回此抽象路径名的绝对路径名字符串。
- getPath(),将此抽象路径名转换为路径名字符串。
- getName(),返回由此抽象路径名表示的文件或目录的名称。
- length(),返回由此抽象路径名表示的文件的长度(大小,单位是字节)。
File f1=new File("E:\\WebFront-endDevelopment\\java\\basic-code\\day13\\src\\ex01.java");
File f2=new File("day13\\src\\ex01.java");
System.out.println(f1.getAbsolutePath()); // E:\WebFront-endDevelopment\java\basic-code\day13\src\ex01.java
System.out.println(f2.getAbsolutePath()); /// E:\WebFront-endDevelopment\java\basic-code\day13\src\ex01.java
System.out.println(f1.getPath()); // E:\WebFront-endDevelopment\java\basic-code\day13\src\ex01.java
System.out.println(f2.getPath()); // day13\src\ex01.java
System.out.println(f1.getName()); // ex01.java
System.out.println(f2.getName()); // ex01.java
System.out.println(f1.length()); // 536
System.out.println(f2.length()); // 536
判断功能的方法
- exists(),测试此抽象路径名表示的文件或目录是否存在。
- isDirectory(),测试此抽象路径名表示的文件是否为目录。
- isFile(),测试此抽象路径名表示的文件是否为普通文件。
File f1= new File("day13\\src\\ex01.java");
System.out.println(f1.exists()); // true
System.out.println(f1.isDirectory()); // false
System.out.println(f1.isFile()); // true
创建删除功能的方法
- createNewFile(),当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
- delete(),删除由此抽象路径名表示的文件或目录。
- mkdir(),创建由此抽象路径名命名的目录。
- mkdirs(),包括任何必需但不存在的父目录。
File f1 = new File("day13\\src\\ex05.java");
System.out.println(f1.exists()); // false
try {
f1.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(f1.exists()); // true
f1.delete();
System.out.println(f1.exists()); // false
File f2 = new File("day13\\src\\hello");
System.out.println(f2.exists()); // false
f2.mkdir(); // mkdirs()创建多级目录
System.out.println(f2.exists()); // true
变遍历(文件夹)目录
-
list(),返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
-
listFiles(),返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
// 如果文件夹不存在或者遍历文件,返回的是空指针异常 File f1 = new File("day13\\src\\cn\\calculator"); String[] list = f1.list(); for (String s : list) { System.out.println(s); // Calculator.java demo.java } File f2 = new File("day13\\src\\cn\\calculator"); File[] files = f2.listFiles(); // day13\src\cn\calculator\Caculator.java for (File file : files) { System.out.println(file); // day13\src\cn\calculator\demo.java }
文件过滤器
-
listFiles(FileFilter filter),返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
public interface FileFilter 抽象路径名的过滤器 方法:accept(File pathname),测试指定的抽象路径名是否应包含在路径名列表中。 注意:没有实现类,需要自己写实现类,重写过滤方法accept,在方法中自己定义过滤规则
public class FileFilterImpl implements FileFilter { @Override public boolean accept(File file) { if(file.isDirectory()){ return true; }else if(file.getName().indexOf("ex")==-1){ return false; }else{ return true; } } }
public static void main(String[] args) { File file = new File("day13\\src"); getAllFiles(file); } public static void getAllFiles(File dir){ File[] files=dir.listFiles(new FileFilterImpl()); for (File file : files) { if(file.isDirectory()){ getAllFiles(file); }else{ System.out.println(file); } } }
public static void main(String[] args) { File file = new File("day13\\src"); getAllFiles(file); } public static void getAllFiles(File dir){ File[] files=dir.listFiles(new FileFilter(){ @Override public boolean accept(File file) { return file.isDirectory()||file.getName().indexOf("ex")!=-1; } }); for (File file : files) { if(file.isDirectory()){ getAllFiles(file); }else{ System.out.println(file); } } }
-
listFiles(FilenameFilter filter),返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
public interface FilenameFilter 用于实现此接口的类的实例用于过滤文件名。 方法:accept(File dir, String name),测试指定文件是否应包含在文件列表中。 注意:没有实现类,需要自己写实现类,重写过滤方法accept,在方法中自己定义过滤规则
public static void main(String[] args) { File file = new File("day13\\src"); getAllFiles(file); } public static void getAllFiles(File dir){ File[] files=dir.listFiles(new FilenameFilter(){ @Override public boolean accept(File dir, String name) { return new File(dir,name).isDirectory()||name.indexOf("ex")!=-1; } }); for (File file : files) { if(file.isDirectory()){ getAllFiles(file); }else{ System.out.println(file); } } }
public static void main(String[] args) { File file = new File("day13\\src"); getAllFiles(file); } public static void getAllFiles(File dir){ File[] files=dir.listFiles((dir1,name)->{ return new File(dir,name).isDirectory()||name.indexOf("ex")!=-1; }); for (File file : files) { if(file.isDirectory()){ getAllFiles(file); }else{ System.out.println(file); } } }