一、File类概述
Java中的File类是一个非常实用的类,它代表了一个文件或目录的路径名。使用File类,你可以对文件或目录进行创建、删除、重命名、遍历等操作。在使用File类之前,你需要引入java.io包。
二、File类常用方法
1. File构造函数
File(String pathname):通过给定的路径名字符串创建一个新File实例。 File(String parent, String child):根据父路径和子路径字符串创建一个新File实例。 File(File parent, String child):根据父路径和子路径名字创建一个新File实例。
2. 文件或目录的常用操作
2.1 创建文件或目录
boolean createNewFile():创建一个新的空文件,如果文件已经存在,则不会创建,返回false。 boolean mkdir():创建一个新目录,如果目录已经存在,则不会创建,返回false。 boolean mkdirs():创建一个新目录和其所有父目录,如果目录已经存在,则不会创建,返回false。
2.2 删除文件或目录
boolean delete():删除文件或目录。如果是一个目录,则该目录必须为空目录才能被删除。 void deleteOnExit():在VM退出时删除文件或目录。
2.3 重命名文件或目录
boolean renameTo(File dest):重命名文件或目录。当目标文件或目录已经存在时,将覆盖它。
2.4 判断文件或目录的存在性和属性
boolean exists():判断文件或目录是否存在。 boolean isDirectory():判断是否为目录。 boolean isFile():判断是否为文件。 boolean canRead():判断文件或目录是否可读。 boolean canWrite():判断文件或目录是否可写。 boolean isHidden():判断文件或目录是否是隐藏文件或目录。 long lastModified():返回文件或目录最后修改时间戳(自1970年1月1日00:00:00 GMT起的秒数)。 long length():返回文件的长度。
3. 文件或目录的遍历
3.1 获取文件或目录列表
String[] list():获取该目录下的所有文件和目录的名称字符串数组。 File[] listFiles():获取该目录下的所有文件和目录的File对象数组。 File[] listFiles(FilenameFilter filter):获取该目录下符合指定过滤器的所有文件和目录的File对象数组。 File[] listFiles(FileFilter filter):获取该目录下满足指定过滤器的所有文件和目录的File对象数组。
3.2 文件或目录的遍历
ListgetFiles(File file, List fileList):递归获取目录下所有文件的File对象,并加入到fileList集合中。
三、File类完整示例代码
import java.io.*; public class FileDemo { public static void main(String[] args) throws IOException { // 构造函数示例 File file1 = new File("test.txt"); // 相对路径,当前工作目录 File file2 = new File("/Users/username/test.txt"); // 绝对路径 File file3 = new File("/Users/username", "test.txt"); // 父路径+子路径 File file4 = new File(new File("/Users/username"), "test.txt"); // File对象和子路径 // 文件或目录的常用操作示例 file1.createNewFile(); file2.mkdirs(); file3.delete(); file4.renameTo(new File("/Users/username/newname.txt")); // 判断文件或目录的存在性和属性示例 System.out.println(file1.exists()); System.out.println(file2.isDirectory()); System.out.println(file2.canRead()); System.out.println(file3.isFile()); System.out.println(file3.canWrite()); // 文件或目录的遍历示例 File[] fileList = new File("/Users/username").listFiles(); for (File file : fileList) { System.out.println(file.getName()); } ListallFiles = new ArrayList<>(); getFiles(new File("/Users/username"), allFiles); for (File file : allFiles) { System.out.println(file.getAbsolutePath()); } } public static void getFiles(File file, List fileList) { // 如果是文件夹,递归获取子文件 if (file.isDirectory()) { File[] subFiles = file.listFiles(); for (File subFile : subFiles) { getFiles(subFile, fileList); } } else { fileList.add(file); } } }