File类
File类创建对象
| 方法名称 |
说明 |
| public File(String pathName) |
根据文件路径创建文件对象 |
| public File(String parent, String child) |
根据父路径名 字符串 和子路径名 字符串 创建文件对象 |
| public File(File parent, String child) |
根据父路径对应 文件对象 和子路径名 字符串 创建文件对象 |
- File封装的对象仅仅是一个路径名,这个路径可以是存在的,也可以是不存在
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class FileDemo01 { public static void main(String[] args) { File f1 = new File("E:\\A.txt"); System.out.println(f1.exists());
File f2 = new File("E:\\A"); System.out.println(f2.exists());
File f3 = new File("E:\\","A.txt"); System.out.println(f3.exists());
File f4 = new File(new File("E:\\"),"A"); System.out.println(f4.exists()); } }
|
路径分为绝对路径和相对路径
绝对路径:从盘符的根目录开始,一直到具体的某个文件或文件夹
相对路径:相对于当前项目
File类常用API
判断方法
| 方法名称 |
说明 |
| public boolean isDirectory() |
判断此路径名表示的File是否为文件夹 |
| public boolean isFile() |
判断此路径名表示的File是否为文件 |
| public boolean exists() |
判断此路径名表示的File是否存在 |
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class FileDemo02 { public static void main(String[] args) throws IOException { File f1 = new File("A.txt"); System.out.println(f1.createNewFile());
File f2 = new File("A.txt"); System.out.println(f2.isFile());
File f3 = new File("Day03/src"); System.out.println(f3.isDirectory());
File f4 = new File("Day03/src/com/norlcyan/file/FileDemo02.java"); System.out.println(f4.exists()); } }
|
练习:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| package com.norlcyan.file;
import java.io.File; import java.util.Scanner;
public class FileTest01 {
public static void main(String[] args) { Scanner sc = new Scanner(System.in);
while (true) { System.out.println("请输入文件夹路径:"); String path = sc.nextLine(); File file = new File(path); if (file.isFile()) { System.out.println("该路径是一个文件路径,而非文件夹路径"); } else if (!file.exists()) { System.out.println("该路径不存在"); } else if (file.isDirectory()) { System.out.println("输入成功!!!"); break; } } } }
|
获取方法
| 方法名称 |
说明 |
| public long length() |
返回文件的大小(字节数量) 注意:如果是文件夹的话,调用该方法返回的结果是错误的 |
| public String getAbsolutePath() |
返回文件的绝对路径 |
| public String getPath() |
返回定义文件时使用的路径 |
| public String getName() |
返回文件的名称,带后缀 |
| public long lastModified() |
返回文件的最后修改时间(时间单位:毫秒值) |
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class FileDemo03 { public static void main(String[] args) { File f1 = new File("A.txt"); System.out.println(f1.getAbsoluteFile());
File f2 = new File("C:\\Users\\Zhao\\Desktop\\Java Ai\\Code\\AdvanceCode\\A.txt"); System.out.println(f2.getName());
long l = f2.lastModified(); Date d = new Date(l); System.out.println(d); } }
|
getPath作用不大,所以了解即可
创建和删除方法
| 方法名称 |
说明 |
| public boolean createNewFile() |
创建一个新的空的文件 |
| public boolean mkdir() |
只能创建一级文件夹 |
| public boolean mkdirs() |
可以创建多级文件夹(也可以创建单级文件夹) |
| public boolean delete() |
删除由此抽象路径名表示的文件或空文件夹 |
返回值表示创建或删除是否成功
delete方法删除的文件是不会留存在回收站的,一定要注意数据丢失
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| package com.norlcyan.file;
import java.io.File; import java.io.IOException;
public class FileDemo04 { public static void main(String[] args) throws IOException { File f1 = new File("Day03\\B.txt"); System.out.println(f1.createNewFile());
File f2 = new File("Day03\\AAA"); System.out.println(f2.mkdir());
File f3 = new File("Day03\\AAA\\BBB\\CCC"); System.out.println(f3.mkdirs()); System.out.println(f1.delete()); } }
|
遍历方法
| 方法名称 |
说明 |
| public File[] listFiles() |
获取当前目录下所有的一级文件对象 返回File数组 |
- 当调用者File表示的路径不存在时,返回null
- 当调用者File表示的路径是文件时,返回null
- 当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组
- 当调用者File表示的路径是需要权限才能访问的文件夹时,返回null
示例:
当前有一个文件目录:

需求是将所有.java的文件打印出来
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import java.io.File; import java.util.Objects;
public class FileDemo05 { public static void main(String[] args) { method(); } public static void method() { File file = new File("E:\\ListFileTest"); File[] files = file.listFiles(); for (File f : Objects.requireNonNull(files)) { if (f.getName().endsWith(".java")) { System.out.println(f.getName()); } } } }
|
如果aaa文件下也有.java文件,想要获取的话就需要用到递归
递归
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class RecursionDemo01 { public static void main(String[] args) { method();
func01(); } public static void method() { method(); }
public static void func01() { func02(); }
public static void func02() { func01(); } }
|
终止条件就是停止直接调用自身或停止间接调用自身
案例:
- 使用递归求阶乘
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| package com.norlcyan.recursion;
public class RecursionDemo02 { public static void main(String[] args) { System.out.println(factorial(5)); }
public static long factorial(int n) { if (n == 1) { return 1; } else { return n * factorial(n - 1); } } }
|
解题思路:将大问题层层转化为一个与原问题相似的,规模更小的问题来解决

获取文件夹内所有文件
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| package com.norlcyan.file;
import java.io.File;
public class FileDemo06 { public static void main(String[] args) { File path = new File("E:\\ListFileTest"); getJavaFile(path); }
public static void getJavaFile(File path) { if (path == null) return; if (!path.exists()) return; if (!path.isDirectory()) return;
File[] files = path.listFiles(); if (files == null) return;
for (File file : files) { if (file.isFile() && file.getName().endsWith(".java")) { System.out.println(file.getName()); } else if (file.isDirectory()){ getJavaFile(file); } } } }
|
删除文件夹
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| package com.norlcyan.file;
import java.io.File;
public class FileDemo07 { public static void main(String[] args) { File path = new File("E:\\ListFileTest _Del"); System.out.println(cleanDirectory(path)); }
public static boolean cleanDirectory(File path) { File[] files = path.listFiles(); if (files == null) return false; for (File file : files) { if (file.isFile()) { file.delete(); } else{ if (file.listFiles() != null) { if (file.listFiles().length == 0) { file.delete(); } else { cleanDirectory(file); file.delete(); } } } } return true; } }
|
统计文件夹大小
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import java.io.File;
public class FileDemo08 { public static void main(String[] args) { File file = new File("E:\\Program Files"); System.out.println(getDirectoryStorage(file)); }
public static long getDirectoryStorage(File path) { File[] files = path.listFiles(); if (files == null) return -1; long storage = 0; for (File file : files) { if (file.isFile()) { storage += file.length(); } else { long directoryStorage = getDirectoryStorage(file); storage += directoryStorage; } } return storage; } }
|