Java【File类】
一、概述
java.io.File
文件和目录路径名的抽象表示形式。java把电脑中的文件和文件夹(目录)封装成了一个File类,我们可以使用File类操作文件和文件夹。
java.io.File
是一个与系统无关的类,任何的操作系统都可使用这个类中的方法。
二、静态成员变量
static final String pathSeparator
: 路径分隔符的字符串类型,由字符类型和空字符串拼接得到
The system-dependent path-separator character, represented as a string for convenience.
// 源码
public static final String pathSeparator = "" + pathSeparatorChar;
static final char pathSeparatorChar
: 路径分隔符的字符类型
The system-dependent path-separator character.
static final String separator
: 文件名称分隔符的字符串类型,由字符类型和空字符串拼接得到
The system-dependent default name-separator character, represented as a string for convenience.
public static final String separator = "" + separatorChar;
static final char separatorChar
: 文件名称分隔符的字符类型
The system-dependent default name-separator character.
二、构造方法
创建File对象,只是把路径封装为File对象,不考虑路径是否真实存在
-
File(File parent, String child)
父路径是File类型,可以使用File的方法对路径进行一些操作,再使用路径创建对象 -
File(String pathname)
最为常用的方法,路径可以以文件结尾,也可以以文件夹结尾,相对路径/绝对路径都可以,路径存不存在也都可以创建File对象。 -
File(String parent, String child)
父路径和子路径可以单独书写,使用起来非常灵活,父路径和子路径都可以变化
三、常用方法
1、获取功能的方法
public String getAbsolutePath()
:返回此File的绝对路径名称字符串。public String getPath()
:将此File转换为路径名字字符串。public String getName()
:返回由此File表示的文件或者目录的名称。public long length()
:返回由此File表示的文件的长度。
代码实例
public class Demo03File {
public static void main(String[] args) {
File f = new File("/usr/yanzhuang/zhaoxiao.java");
System.out.println("文件绝对路径:" + f.getAbsolutePath());
System.out.println("文件的构造路径:" + f.getPath());
System.out.println("文件名称:" + f.getName());
System.out.println("文件长度:" + f.length() + "字节");
File f2 = new File("/Users/yanzhuang/Downloads");
System.out.println("目录的绝对路径:" + f2.getAbsolutePath());
System.out.println("目录的构造路径:" + f2.getPath());
System.out.println("目录名称:" + f2.getName());
System.out.println("目录长度" + f2.length() + "字节"); // 只能获取文件的大小,无法使用此方法获取文件夹的大小
}
}
2、判断功能的方法
public boolean exists()
:此File表示的文件或目录是否实际存在public boolean isDirectory()
:此File表示的文件是否为目录public boolean isFile()
:此File表示的是否是文件
代码实例:
public class Demo04File {
public static void main(String[] args) {
File f = new File("/Users/yanzhuang/Downloads/2022.rar");
File f2 = new File("/Users/yanzhuang");
// 判断是否存在
System.out.println("/Users/yanzhuang/Downloads/2022.rar 是否存在:" + f.exists());
System.out.println("/Users/yanzhuang 是否存在:" + f2.exists());
// 判断文件还是目录
System.out.println("/Users/yanzhuang 文件?:" + f2.isFile());
System.out.println("/Users/yanzhuang 目录?:" + f2.isDirectory());
}
}
3、创建删除功能的方法
public boolean createNewFile()
:当且仅当具有该名称的文件上不存在时,创建一个新的空文件。public boolean delete()
:删除由此File表示的文件或目录public boolean mkdir()
:创建由此File表示的目录。public boolean mkdirs()
:创建由此File表示的目录,包括任何必需但不存在的父目录。
代码实例:
public class Demo05File {
public static void main(String[] args) throws IOException {
// 文件的创建
File f = new File("zhao.txt");
System.out.println("是否存在:" + f.exists());// false
System.out.println("是否创建" + f.createNewFile()); // true
System.out.println("是否存在:" + f.exists());// true
// 目录的创建
File f2 = new File("newDir");
System.out.println("是否存在:" + f2.exists());
System.out.println("是否创建:" + f2.mkdir());
System.out.println("是否存在:" + f2.exists());
// 创建多级目录
File f3 = new File("newDir/newDirB");
System.out.println("是否存在:" + f3.exists());
System.out.println("是否创建:" + f3.mkdirs());
System.out.println("是否存在:" + f3.exists());
}
}
四、目录遍历
public String[] list()
:返回一个String数组,表示该File目录总的所有子文件或目录。public File[] listFiles()
:返回一个Files数组,表示该File目录中的所有的子文件或目录。
注意:
(1) list方法和listFiles方法遍历的是构造方法中给出的目录
(2) 如果构造方法中给出的目录的路径不存在,会抛出空指针异常
(3) 如果构造方法中给出的路径不是一个目录,也会抛出空指针异常
(4) 隐藏的文件、文件夹也能获取到
代码实现:
public class Demo06File {
public static void main(String[] args) {
File dir = new File("/Users/yanzhuang");
// 获取当前目录下的文件以及文件夹的名称。
String[] names = dir.list();
for(String name : names) {
System.out.println(name);
}
System.out.println("--------------");
// 获取当前目录下的文件及文件夹对象,只要拿到了文件对象,那么就可以获取更多信息
File[] files = dir.listFiles();
for (File file : files) {
System.out.println(file);
}
}
}