File
File 类是文件和目录路径名的抽象表示形式。这个类提供了与文件系统进行交互的各种方法,例如创建、删除、重命名文件或目录,以及检查文件或目录的状态(如是否存在、是否为目录等)。
File类对象的创建
构造器 | 说明 |
---|---|
public File(String pathName) | 根据文件路径创建文件对象 |
public File(String parent, String child) | 根据父路径和子路径名字创建文件对象 |
public File(File parent, String child) | 根据父路径对应文件对象和子路径名字创建对象 |
案例演示
public class FileTest {
public static void main(String[] args) {
//public File (String pathName):根据文件路径创建文件对象
File f1 = new File("F:\\Data\\aaa.txt");
//OR
File f2 = new File("F:/Data/aaa.txt");
//OR
/*
File.separator 是 java.io.File 类中的一个静态字段,
它代表了当前操作系统文件路径的分隔符。在不同的操作系统中,
文件路径的分隔符是不一样的:在Windows系统中,路径分隔符是反斜杠 \。
在Unix/Linux系统中,路径分隔符是正斜杠 /。
*/
String path = "F:" + File.separator + "Data" + File.separator + "aaa.txt";
File f3 = new File(path);
//public long length():返回此抽象路径名表示的文件的长度。
System.out.println(f3.length());
//以上带盘符的路径称为绝对路径,而相对路径是不带盘符的,默认直接在工程的文件夹下寻找文件
File f4 = new File ("oop2\\src\\离歌慢饮.txt");
System.out.println(f4.exists());
System.out.println(f4.length());
}
}
斜杠"/“和双反斜杠”\\"都可以表示路径分隔符,但使用反斜杠时需两个反斜杠都写上,不然很可能被系统认为该反斜杠对后面的字符进行转义。除了这两个路径分隔符外,还可使用静态字段File.separator来代表当前系统文件路径的分隔符。
带盘符的文件路径称为绝对路径,而不带盘符的文件路径称为相对路径,通常来说。相对路径的使用频率要远大于绝对路径。
文件和文件夹都可以封装成File对象,File封装的对象只是一个路径名,允许该路径名不存在
File提供的判断文件类型、获取文件信息的方法
方法名 | 说明 |
---|---|
public boolean exists() | 判断当前文件对象对应的文件路径是否存在 |
public boolean isFile() | 判断当前文件对象指代的是否是文件 |
public boolean isDirectory() | 判断当前文件对象指代的是否是文件夹 |
public String getName() | 获取文件的名称(包含后缀) |
public long length() | 获取文件的大小,返回字节数 |
public long lastModified() | 获取文件最后的修改时间 |
public String getPath() | 获取创建文件对象时所使用的路径 |
public String getAbsolutePath() | 获取绝对路径 |
案例演示
public class FileTest1 {
public static void main(String[] args) {
File file = new File("oop2\\src\\离歌慢饮.txt");
File folder = new File("oop2");
//public boolean exists() 判断当前文件对象对应的文件路径是否存在
System.out.println(file.exists());
//public boolean isFile() 判断当前文件对象指代的是否是文件
System.out.println(file.isFile());
//public boolean isDirectory() 判断当前文件对象指代的是否是文件夹
System.out.println(folder.isDirectory());
//public String getName() 获取文件的名称(包含后缀)
System.out.println(file.getName());
//public long length() 获取文件的大小,返回字节数
long length = file.length();
System.out.println(length);
//public long lastModified() 获取文件最后的修改时间
long millis = file.lastModified();
//获取时间戳对象实例
Instant instant = Instant.ofEpochMilli(millis);
/* 通过本地默认时区和时间戳结合创建ZoneDateTime对象,
再调用toLocalDateTime方法获取该日期时间的LocalDateTime部分
,然后赋值给LocalDateTime对象dateTime
*/
LocalDateTime dateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//格式化并输出
System.out.println(dateTime.format(dtf));
//public String getPath() 获取创建文件对象时所使用的路径
System.out.println(file.getPath());
//public String getAbsolutePath() 获取绝对路径
System.out.println(file.getAbsolutePath());
}
}
File提供的创建及删除文件的方法
方法名 | 说明 |
---|---|
public boolean createNewFile() | 创建一个新文件,成功返回true,失败返回false |
public boolean mkdir() | 创建文件夹,只能创建一级文件夹 |
public boolean mkdirs() | 创建文件夹,可以创建多个文件夹 |
public&enspboolean delete() | 删除文件或空文件夹,不能删除非空文件夹 |
用delete方法删除后的文件不会进入回收站
案例演示
public class FileCreateDeleteTest {
public static void main(String[] args) throws Exception{
// public boolean createNewFile():创建一个新文件,成功返回true,失败返回false
File file = new File("F:\\Data\\abc.txt");
System.out.println(file.createNewFile());
// public boolean mkdir():创建一个一级目录,成功返回true,失败返回false
File directory = new File("F:\\Data\\abc\\bcd");
File directory2 = new File("F:\\Data\\abc");
System.out.println(directory.mkdir());
System.out.println(directory2.mkdir());
// public boolean mkdirs():创建一个目录树,成功返回true,失败返回false
File directory3 = new File("F:\\Data\\abc\\bcd\\cde");
System.out.println(directory3.mkdirs());
// public boolean delete():删除文件或空文件夹,不能删除非空文件夹
// cde文件夹成功删除
System.out.println(directory3.delete());
//往bcd里填充文件再删除,删除失败
File file2 = new File("F:\\Data\\abc\\bcd\\1.txt");
System.out.println(file2.createNewFile());
File directory4 = new File("F:\\Data\\abc\\bcd");
System.out.println(directory4.delete());
}
}
File类提供的遍历目录的功能
方法名 | 说明 |
---|---|
public String[] list() | 返回一个字符串数组,它包含目录中所有子文件和子目录的名字(不包括路径) |
public File[] listFiles() | 列出指定目录下的所有子文件和子目录 |
案例演示
public class FileTest2 {
public static void main(String[] args) throws Exception {
// public String[] list():获取当前目录下所有的一级目录名称到字符串数组中去返回
File f1 = new File("F:\\Data");
String[] folderNames = f1.list();
for (String folderName : folderNames) {
System.out.println(folderName);
}
// public File[] listFiles():获取当前目录下所有的一级文件对象到一个文件对象数组中去返回
File[] files = f1.listFiles();
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
}
}
案例:改变某文件夹下文件的序号和后缀,要求从序号19开始,后缀由txt改为doc
public class FileTest3 {
public static void main(String[] args) throws IOException {
// 改变某文件夹下文件的序号和后缀,要求从序号19开始,后缀由txt改为doc
// 1.创建目录TestFiles
File file = new File("F:\\Data\\TestFiles");
file.mkdir();
// 2.批量创建文件
for (int i = 0; i < 20; i++) {
String path = file.getPath() + File.separator + (i + 1) + ".txt";
File f = new File(path);
f.createNewFile();
}
// 3.遍历文件夹下所有文件
File[] files = file.listFiles();
for (File fi : files) {
String fileName = fi.getName();
String index = fileName.substring(0, fileName.indexOf("."));
String finalName = (Integer.parseInt(index) + 18) + ".doc";
//重命名文件,参数为File对象
fi.renameTo(new File(file, finalName));
}
}
}
注:
当主调是文件或路径不存在时,返回null
当主调是空文件夹时,返回一个长度为0的数组
当主调是一个有内容的空文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回
当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回
当主调是一个文件夹,但没有权限访问该文件夹时,返回null