文章目录
- File类
File类
java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
- 基本方法
构造方法:
public File(String pathname)
:通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。public File(String parent, String child)
:从父路径名字符串和子路径名字符串创建新的 File实例。public File(File parent, String child)
:从父抽象路径名和子路径名字符串创建新的 File实例。
public class FileDemo {
public static void main(String[] args) {
// 构造方法
File file1 = new File("D:\\file\\a.txt");
File file2 = new File("D:\\", "file\\b.txt");
File file3 = new File("D:\\");
File file4 = new File(file3, "file\\c.txt");
}
}
获取功能的方法:
public String getAbsolutePath()
:返回此File的绝对路径名字符串。public String getPath()
:将此File转换为路径名字符串。public String getName()
:返回由此File表示的文件或目录的名称。public long length()
:返回由此File表示的文件的长度。
public class FileDemo {
public static void main(String[] args) {
// 构造方法
File file1 = new File("file\\a.txt");
File file2 = new File("D:\\", "file\\b.txt");
File file3 = new File("D:\\");
File file4 = new File(file3, "file\\c.txt");
// 获取功能方法
System.out.println("file1的绝对路径:" + file1.getAbsoluteFile());
System.out.println("file2的路径名字字符串:" + file1.getPath());
System.out.println("file4的文件或者目录名称:" + file4.getName());
System.out.println("file4的文件长度:" + file4.length());
}
}
判断功能的方法:
public boolean exists()
:此File表示的文件或目录是否实际存在。public boolean isDirectory()
:此File表示的是否为目录。public boolean isFile()
:此File表示的是否为文件。
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
// 构造方法
File file1 = new File("D:/file\\a.txt");
File file2 = new File("D:\\", "file\\b.txt");
File file3 = new File("D:\\");
File file4 = new File(file3, "file\\c.txt");
// 判断方法
System.out.println("判断文件是否存在:" + file1.exists());
System.out.println("判断文件是否为目录:" + file3.isDirectory());
System.out.println("判断文件是否为文件:" + file1.isFile());
}
}
注意:
这里我们可以发现,我们创建了一个对象名为file1的对象,但是调用exists()方法的时候却为false。这是因为在 Java 中,通过 new File() 创建一个 File 对象并不会自动在文件夹中创建文件。File 类的主要作用是操作文件路径和文件属性,并不负责文件的创建。
创建删除功能的方法:
public boolean createNewFile()
:当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。public boolean delete()
:删除由此File表示的文件或目录。public boolean mkdir()
:创建由此File表示的目录。public boolean mkdirs()
:创建由此File表示的目录,包括任何必需但不存在的父目录。
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
File file1 = new File("D:/file/a.txt");
File file2 = new File("D:\\", "file");
file2.mkdir();
file1.createNewFile();
System.out.println("判断文件是否存在:" + file1.exists());
file1.delete();
System.out.println("判断文件是否存在:" + file1.exists());
File file3 = new File("D:\\");
File file4 = new File(file3, "file1\\txt\\c");
file4.mkdirs();
}
}
当我们使用file对象创建一个文件夹时,我们的D盘下面会创建一个名为file的文件夹
通过file1.createNewFile(),我们创建了一个a.txt的文件,然后使用file1.exists()判断文件是否存在,果然为true;
当我们调用file1.delete()方法时,文件a.txt被删除掉,同时我们调用file1.exists() 判断结果为false,同时我们可以发现文件a.txt被删除了。
最后我们调用了file4.mkdirs()创建多级目录,结果如图
目录的遍历:
public String[] list()
:返回一个String数组,表示该File目录中的所有子文件或目录。public File[] listFiles()
:返回一个File数组,表示该File目录中的所有的子文件或目录。
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
File file1 = new File("D:\\file1\\txt\\c");
String[] list = file1.list();
for (String s : list) {
System.out.println(s);
}
File[] files = file1.listFiles();
for (File file : files) {
System.out.println(file);
}
}
}
递归多级目录
在D盘创建一个file1目录,在file1下面创建a.txt文件、b.txt文件、c.txt文件
在file1目录下面创建一个txt目录,在txt目录下面创建c目录,在c目录下面创建a.txt文件、b.txt文件、c.txt文件。
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:\\file1");
printFile(file);
}
public static void printFile(File file){
File[] files = file.listFiles();
for (File file1 : files) {
if (file1.isDirectory()){
System.out.println("目录:" + file1.getAbsolutePath());
printFile(file1);
}else {
System.out.println("文件名:" + file1.getAbsolutePath());
}
}
}
}
文件搜索
在file1目录创建一个d.java文件,在c目录下面创建一个d.java文件。
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:\\file1");
printFile(file);
}
public static void printFile(File file) {
File[] files = file.listFiles();
for (File file1 : files) {
if (file1.isDirectory()) {
System.out.println("目录:" + file1.getAbsolutePath());
printFile(file1);
} else {
if (file1.getName().endsWith(".java")) {
System.out.println("文件名:" + file1.getAbsolutePath());
}
}
}
}
}
文件过滤器优化
java.io.FileFilter 是一个接口,是File的过滤器。通过 **listFiles(FileFilter)**来过滤掉一些不符合规则的file。
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:\\file1");
printFile(file);
}
public static void printFile(File file) {
/* File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".java") || pathname.isDirectory();
}
});*/
File[] files = file.listFiles((pathname -> pathname.getName().endsWith(".java") || pathname.isDirectory()));
for (File file1 : files) {
if (file1.isDirectory()) {
System.out.println("目录:" + file1.getAbsolutePath());
printFile(file1);
} else {
System.out.println("文件名:" + file1.getAbsolutePath());
}
}
}
}
这里通过匿名内部类的方式或者是Lambda表达式都可以完成文件过滤。
欢迎java热爱者了解文章,作者将会持续更新中,期待各位友友的关注和收藏。。。