- 主要用于文件和目录的创建、删除和查询等操作,Java 把电脑中的文件封装成了 File 类,在编写代码的时候我们可以使用 File 类来对文件或者文件夹进行操作。
分隔符
public class Main {
public static void main(String[] args) {
//路径分隔符,在window中,分割两个路径使用 ";"
//在linux中分割两个路径使用 ":"
String pathSeparator = File.pathSeparator;
System.out.println(pathSeparator); // ;
//文件名称分隔符,在window中文件名称使用 "" 来分隔
//在linux中使用 "/" 来分隔文件名称
String separator = File.separator;
System.out.println(separator);//
}
}
构造方法
public class Main {
public static void main(String[] args) {
File file = new File("C:\Users\17388\Desktop\1.txt");
System.out.println(file); //C:Users17388Desktop1.txt
String parent = "C:\Users\17388\Desktop";
String child = "1.txt";
File file1 = new File(parent, child);
System.out.println(file1);
}
}
常用方法
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("1.txt");
System.out.println(file); //1.txt,toString内部调用了getPath
//获取文件绝对路径
System.out.println(file.getAbsolutePath());//D:ComputerProjectjava1.txt
//获取创建时的路径
System.out.println(file.getPath());//1.txt
//获取文件名
System.out.println(file.getName());//1.txt
//获取文件的字节数,如果不是文件或者文件不存在返回0
System.out.println(file.length());
//判断文件是否存在
System.out.println(file.exists());//false
//判断是否是文件,路径不存在返回false
System.out.println(file.isFile());//false
//判断当前路径是否是目录,路径不存在返回false
System.out.println(file.isDirectory());//false
//文件不存在则创建文件,否则不创建,只能创建文件
boolean flag = file.createNewFile();
System.out.println(flag);//true
if (file.exists()) {
System.out.println(file.isFile());//true
System.out.println(file.isDirectory());//false
}
File file1 = new File("1");
//创建单级目录
boolean flag1 = file1.mkdir();
System.out.println(flag1);//true
File file2 = new File("11\111");
//创建多级目录
boolean flag2 = file2.mkdirs();
System.out.println(flag2);//true
//删除文件或者目录
System.out.println(file.delete());
System.out.println(file1.delete());
System.out.println(file2.delete());
}
}
遍历目录
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("D:\Computer\Project\java");
String[] list = file.list();
for (String s : list) {
System.out.println(s);
}
File[] files = file.listFiles();
for (File file1 : files) {
System.out.println(file1);
}
}
}
递归读取目录及其子目录文件
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("D:\Computer\Project\java");
printAllFile(file);
}
private static void printAllFile(File file) {
System.out.println(file);
File[] files = file.listFiles();
for (File file1 : files) {
if(file1.isFile()) {
System.out.println(file1);
} else {
printAllFile(file1);
}
}
}
}
递归查找指定条件文件
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("D:\Computer\Project\java");
printAllFile(file);
}
private static void printAllFile(File file) {
//System.out.println(file);
File[] files = file.listFiles();
for (File file1 : files) {
if(file1.isFile()) {
if(file1.getName().toLowerCase().endsWith(".iml")) {
System.out.println(file1);
}
} else {
printAllFile(file1);
}
}
}
}
文件过滤器
- 使用 FileFilter 过滤器接口,在遍历目录的同时,调用其中的 accept 方法将其中不符合要求的文件过滤掉,然后在进行判断输入即可。(面向接口编程)
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("D:\Computer\Project\java");
printAllFile(file);
}
private static void printAllFile(File file) {
//我们在遍历目录的同时,调用了过滤器中的方法,将不符合要求的文件过滤掉
// File[] files = file.listFiles(new FileFilter() {
// @Override
// public boolean accept(File pathname) {
// if (pathname.isDirectory()) {
// return true;
// } else {
// return pathname.getName().toLowerCase().endsWith(".iml");
// }
// }
// });
// for (File file1 : files) {
// if(file1.isDirectory()) {
// printAllFile(file1);
// } else {
// System.out.println(file1);
// }
// }
File[] files1 = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir, name).isDirectory() ||
name.toLowerCase().endsWith(".java");
}
});
for (File file1 : files1) {
if (file1.isDirectory()) {
printAllFile(file1);
} else {
System.out.println(file1);
}
}
}
}