写在前面
本博客中所有的操作目录,均在D:下载的电影 目录下,结构如下:
概述
java.io.File
是文件和目录路径名的抽象表现形式,其中定义了一些与平台无关的方法来操作文件,主要用于文件和目录的创建、查找和删除等操作。
java.io.File
既可以表示文件,也可以表示文件夹(目录)。
很多应用场景需要使用到java.io.File
类,比如说查看文件的修改日期,文件的类型、目录、大小和读写权限,文件上传与下载,文件的创建、删除、检索以及备份等等。
java.io.File
操作的是文件属性,并非文件内容。
File 类的实例不可变,一旦创建了一个File对象,那么它表示的抽象路径名将永不改变。
静态成员变量
public static final String pathSeparator : 与系统有关的路径分隔符("" + pathSeparatorChar)。
public static final char pathSeparatorChar : 与系统有关的路径分隔符。
public static final String separator : 与系统有关的默认名称分隔符("" + separatorChar)。
public static final char separatorChar :与系统有关的默认名称分隔符。
//与系统有关的文件名称分隔符,windows为反斜杠 \ linux为正斜杠 /
public static final char pathSeparatorChar = fs.getPathSeparator();
public static final String pathSeparator = "" + pathSeparatorChar;
//与系统有关的路径分隔符(windows为冒号 ; linux系统为分号 :
public static final char separatorChar = fs.getSeparator();
public static final String separator = "" + separatorChar;
文件路径
- 绝对路径:完整路径,是指文件在硬盘上真正存在的路径,也就是以盘符(C: or D:)开始的路径,比如 D:\下载的电影\Japanese\学习.avi。
- 相对路径:相对于目标文件的位置,比如以 D:\下载的电影\Japanese\学习.avi 为参考位置,那么 D:\下载的电影\欧美\观摩.rmvb 的相对路径为 …/欧美/观摩.rmvb。
注意:
- 文件路径不区分大小写
- windwos系统的文件名称分隔符使用反斜杠,而反斜杠是转义字符,所以在java语言中,两个反斜杠代表一个普通的反斜杠。
构造方法
public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
public File(URI uri) : 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。
注意
- File类对象的构造并不依赖于传入路径是否真实存在。
- File类对象的地址是否合法是通过枚举类 pathStatus 进行判定的。
/**
* Enum type that indicates the status of a file path.
*/
private static enum PathStatus {
INVALID, CHECKED };
获取方法
public String getAbsolutePath() :获取File的绝对路径。
public String getPath() :获取File的构造路径。
public String getName() :获取File的名称。
public long length() :获取File的字节大小。
public String getParent():获取File的父目录路径;如果没有,则返回 null。
public long lastModified() : 获取File文件最后一次修改的时间(毫秒)。
代码示例:
import java.io.File;
/**
* @author layman
*/
public class Demo01 {
public static void main(String[] args) {
File file = new File("Japanese\\学习.avi");
// 获取绝对路径
System.out.println("文件绝对路径: " + file.getAbsolutePath()); // D:\下载的电影\Japanese\学习.avi
// 将抽象路径名转换为一个路径名字符串。
System.out.println("文件构造路径: " + file.getPath()); // Japanese\学习.avi
// 获取父目录路径名字符串
System.out.println("父目录路径: " + file.getParent()); // Japanese
// 获取抽象路径名表示的文件或文件夹(末尾部分)
System.out.println("文件名称: " + file.getName()); // 学习.avi
/**
*获取文件大小,以字节为单位。如果路径名不存在,则返回 0
*(注意:文件夹是没有大小的,也返回0)
*/
System.out.println("文件大小:" + file.length() + " 字节"); //1,325,116,788
System.out.println("文件最后的修改时间:" + file.lastModified() + " 毫秒");
}
}
运行结果:
文件绝对路径: D:\下载的电影\Japanese\学习.avi
文件构造路径: Japanese\学习.avi
父目录路径: Japanese
文件名称: 学习.avi
文件大小:1,325,116,788 字节
文件最后的修改时间:1608649905362 毫秒
判断方法
public boolean exists() :此File表示的文件或目录是否实际存在。
public boolean isFile() :此File表示的是否为文件。
public boolean isDirectory() :此File表示的是否为目录。
public boolean isAbsolute() :此抽象路径名是否为绝对路径名。
public boolean isHidden() : 此File表示的文件或目录是否是一个隐藏文件。
public boolean canExecute() :测试此File表示的文件或目录是否能被执行
public boolean canRead():测试此File表示的文件或目录是否能被读取
public boolean canWrite():测试此File表示的文件或目录是否能被修改
代码示例:
import java.io.File;
/**
* @author layman
*/
public class Demo02 {
public static void main(String[] args) {
File file = new File("D:\\下载的电影\\Japanese\\学习.avi");
File file1 = new File("D:\\下载的电影\\Japanese");
File file2 = new File("津巴布韦\\学习.avi");
// 判断文件或文件夹是否存在
System.out.println("D:\\下载的电影\\Japanese\\学习.avi 是否存在:" + file.exists());
System.out.println("津巴布韦\\学习.avi 是否存在:" + file2.exists());
System.out.println("--------------------------------------------------");
// 判断是否为文件或者文件夹
System.out.println("D:\\下载的电影\\Japanese\\学习.avi 是否是文件:"+ file.isFile());
System.out.println("D:\\下载的电影\\Japanese\\学习.avi 是否是目录:"+ file.isDirectory(