File 类
File 类在 java.io 包中。
读写文件内容使用 IO流,操作文件/文件夹使用 File类。如新建,删除文件和文件夹;查看文件的属性,如查看文件夹中的内容。
注意,不管是文件还是目录都是使用 File操作。
创建File对象
File 经常使用文件路径字符串来创建 File 对象,文件路径可以是绝对路径(从根目录开始的路径),也可以是相对路径。
构造方法:
- File(File parent, String child) 根据 parent 抽象路径名 和 child 路径名字符串 创建一个新 File 实例。
- File(String pathname) 通过将 给定路径名字符串 转换为 抽象路径名 来创建一个新 File 实例。(常用)
- File(String parent, String child) 根据 parent 路径名字符串 和 child 路径名字符串 创建一个新 File 实例。
package cn.powernode.javase.file; import java.io.File; // 关联文件夹(本地已有的) public class FileTest01 { public static void main(String[] args) { // File(String pathname) 方法 File file = new File("D:\\iofile\\a.txt"); // 写法一:反斜杠\\ // File file = new File("D:/iofile/a.txt"); // 写法二:斜杠/ System.out.println(file); // File(String parent, String child) 方法,( parent:一般指根目录到具体文件这一段 ) File file2 = new File("D:\\iofile", "a.txt"); System.out.println(file2); File parentFile = new File("D:\\iofile"); // 父目录 // File(File parent, String child) 方法,( parent:父目录,child:一般指具体文件名 ) File file3 = new File(parentFile, "a.txt"); System.out.println(file3); } } 执行结果: D:\iofile\a.txt D:\iofile\a.txt D:\iofile\a.txt
常用成员方法:
创建型
- boolean createNewFile() 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
- boolean mkdir() 创建此抽象路径名指定的目录。
- boolean mkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。(可多级)
package cn.powernode.javase.file; import java.io.File; import java.io.IOException; // (在 D:\iofile 文件夹下)创建文件、文件夹 public class FileTest02 { public static void main(String[] args) throws IOException { // 创建一个文件 b.txt File file1 = new File("D:\\iofile\\b.txt"); // 1.通过File描述一个文件 file1.createNewFile(); // 2.创建该文件 //细节1:该方法创建文件时,必须保证父路径(D:\\iofile)是存在的,否则无法创建,会抛出IOException //细节2:该方法只会给你创建文件,不可能创建其他类型内容;没后缀,就会创建一个没有后缀的文件。 // 创建一级文件夹 java File file2 = new File("D:\\iofile\\java"); boolean flag = file2.mkdir(); // 创建成功返回true System.out.println(flag); // true //细节:在创建文件夹时,父路径(D:\iofile)不存在,返回false,并抛出异常 // 创建多级文件夹 abc\java\hello File file3 = new File("D:\\iofile\\abc\\java\\hello"); file3.mkdirs(); } }
判断型
只有当File路径实际存在时,File对象才有判断是文件夹还是文件的意义
- boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
- boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录(文件夹)。
- boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。
package cn.powernode.javase.file; import java.io.File; public class FileTest03 { public static void main(String[] args) { // 比如:本地已建有 D:\iofile\a.txt 文件目录 File file = new File("D:\\iofile\\aaa\\bbb.txt"); // 假的 File file1 = new File("D:\\iofile\\a.txt"); // 真的 // 是否真实存在的路径 System.out.println(file.exists()); // false System.out.println(file1.exists()); // true // 是否为一个文件 System.out.println(file.isFile()); // false System.out.println(file1.isFile()); // true //是否为一个文件夹 System.out.println(file.isDirectory()); // flase System.out.println(file1.isDirectory()); // false } }
获取型
- String getAbsolutePath() 获取绝对路径
相对路径:省略了盘符到项目这一部分的路径,剩下的路径叫做相对路径(eg:day08\a.txt)
好处:可以拼接盘符到项目这一部分路径,根据计算机的路径不同,拼接的内容也不一样
细节:
(1)相对路径只在于当前项目下的文件才可以生效,其他磁盘路径没有相对路径的概念
(2)必须保证当前IDEA列表中的模块实际的磁盘位置也是在项目文件夹下,这时候相对路径才能生效
切记千万不要,直接将你下载好的代码模块直接导入到IDEA中,这样的相对路径是不对的
- String getPath() 获取构造方法中的路径 (你构造方法中传入的是什么路径,原封不动地返回)
- String getName() 获取文件或者文件夹的名称 (最后一个\后面的内容是什么,你就获取什么)
- String[] list() 获取目录下的所有内容,返回字符串数组
- File[] listFiles() 获取目录下的所有内容,返回File对象数组
package cn.powernode.javase.file; import java.io.File; public class FileTest04 { public static void main(String[] args) { // 绝对路径的写法 File file = new File("D:\\jsp\\javase02project\\day08\\a.txt"); System.out.println(file.getAbsolutePath()); // D:\jsp\javase02project\day08\a.txt System.out.println(file.getPath()); // D:\jsp\javase02project\day08\a.txt System.out.println(file.getName()); // a.txt
//File对象必须是一个'文件夹'路径,否则 NullPointerException异常 // 返回字符串数组 File file01 = new File("D:\\jsp\\javase02project\\day08"); // 目录 String[] list = file01.list(); for (String s : list) { System.out.println(s); } /* 打印结果:(day08的下一级目录名) a.txt day08.iml src */ // 返回File对象数组 File file001 = new File("D:\\jsp\\javase02project\\day08"); // 目录 File[] A = file001.listFiles(); for (File a: A) { System.out.println(a); } /* // 打印结果:(day08的下一级目录,绝对路径形式) D:\jsp\javase02project\day08\a.txt D:\jsp\javase02project\day08\day08.iml D:\jsp\javase02project\day08\src */ // 相对路径的写法 File file2 = new File("day08\\a.txt"); System.out.println(file2.getAbsolutePath()); // D:\jsp\javase02project\day08\a.txt System.out.println(file2.getPath()); // day08\a.txt System.out.println(file2.getName()); // a.txt // list()、listFiles()的运行结果跟绝对路径的一样,这里不做演示 } }
删除
- boolean delete() 删除一个文件或者一个空文件夹,不能删除一个有内容的文件夹
package cn.powernode.javase.file; import java.io.File; public class FileTest05 { public static void main(String[] args) { File file = new File("day08\\b.txt"); // 文件 File file1 = new File("day08\\aaa"); // 空文件夹 file.delete(); file1.delete(); } }