一、File 类
1.1 前言
在 JDK 中 通过 java.io.File 类,可以实现操作系统重文件|文件夹的创建、删除、查看、重命名等操作。
1.2 File 类构造方法
File 一共提供了四个构造方法,都是有参构造。其中最常使用的是 File(String) 和 File(String, String) 和File(File, String)
- File(String):参数表示文件或文件夹全路径
- File(String, String):第一个参数表示父文件夹路径,第二个参数表示资源路径
- File(File, String):第一个参数表示父文件夹对象,第二个参数表示资源路径
1.3 创建文件夹
File 中有两个方法能够创建文件夹
- mkDir():创建路径中最后一层文件夹。如果希望创建的文件夹已经存在或者路径中前面的问价不存在,返回 false。
- mkDirs():创建文件夹,如果路径中的文件夹不存在,先创建路径中的文件夹,然后再创建指定的文件夹。返回值表示是否创建成功
代码示例
public static void main(String[] args) {
File file = new File("D:/a/b");
//只会创建b, 如果a不存在创建失败
boolean mkdir = file.mkdir();
System.out.println(mkdir);
File file1 = new File("D:/c/d");
//c不存在会先创建c再创建d
boolean mkdirs = file1.mkdirs();
System.out.println(mkdirs);
}
1.4 判断资源是否存在
exists():判断资源是否存在,存在返回 true,不存在返回 false
代码块:
public static void main(String[] args) {
File file = new File("D:/io");
if (file.exists()) {
System.out.println("D盘中没有io文件夹");
}else {
System.out.println("D盘中存在io文件夹");
}
}
1.5 创建空文件
createNewFile() 方法可以创建一个空文件,要求文件所在目录必须真实存在。
JDK 在定义这个方法时抛出了 IOException(Checked异常),文件路径不正确、无法操作文件等情况下抛出此异常。返回值表示创建成功。
public boolean createNewFile() throws IOException {
SecurityManager security = System.getSecurityManager();
if (security != null) security.checkWrite(path);
if (isInvalid()) {
throw new IOException("Invalid file path");
}
return fs.createFileExclusively(path);
}
代码示例
public static void main(String[] args) {
try {
File file = new File("D:/io/a.txt");
boolean newFile = file.createNewFile();
System.out.println(newFile);
} catch (IOException e) {
e.printStackTrace();
}
}
1.5.1 结果一
设定计算机中 D 盘下没有 io 文件夹。程序运行会出现异常。
1.5.2 为了防止新建文件时因为目录不存在报异常,可以结合 exists() 和 mkDirs() 方法保证程序的稳定运行
public static void main(String[] args) {
try {
File parent = new File("D:/io");
if (!parent.exists()) {
parent.mkdirs();
}
File file = new File(parent, "a.txt");
boolean newFile = file.createNewFile();
System.out.println(newFile);
} catch (IOException e) {
e.printStackTrace();
}
}
1.6 重命名文件
renameTo(File) 剪切。利用剪切特性,把资源剪切后放入到原路径中,起信命,实现重命名功能。
public static void main(String[] args) {
File file = new File("D:/io/a.txt");
boolean b = file.renameTo(new File("D:/io/b.txt"));
System.out.println(b);
}
1.7 删除文件
delete() 可以实现删除文件。如果文件删除成功返回 true。如果文件不存在或删除失败返回 false
public static void main(String[] args) {
File file = new File("D:/io/a.txt");
boolean delete = file.delete();
System.out.println(delete);
}
1.8 判断资源是否为文件
isFile() 判断资源是否是文件。如果是文件 返回 true,如果是文件夹或不存在这个资源返回 false
public static void main(String[] args) {
File file = new File("D:/io/a.txt");
System.out.println(file.isFile());
}
1.9 查看文件名 和 文件路径
getName() 文件名。
**getAbsolutePath() ** 文件在磁盘中全路径。
**getPath() ** 创建文件时指定的路径
public static void main(String[] args) {
File file = new File("abc/test.txt");
System.out.println(file.getName()); //test.txt
System.out.println(file.getAbsolutePath()); //D:\ideaws\abc\test.txt
System.out.println(file.getPath()); //abc\test.txt
}
1.10 查看目录中内容
list() 返回值为目录中资源的名称。返回值类型String[]。数组长度和资源个数相同。如果是空文件夹范围一个长度为0的数组对象。如果文件夹不存在返回null。
listFiles() 返回值为目录中资源对象。返回值类型File[]。数组长度和资源个数相同。如果是空文件夹范围一个长度为0的数组对象。如果文件夹不存在返回null。
public static void main(String[] args) {
File file = new File("D:/io");
//获取文件夹中资源名称
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 static void main(String[] args) {
//创建文件夹对象
File file = new File("D:/io");
//调用方法 参数1: 文件夹对象 参数2: 空格数量
test(file, 0);
}
public static void test(File file, int length){
File[] files = file.listFiles();
for (File file1 : files) {
if(file1.isFile()){
for (int i = 0; i < length; i++) {
System.out.print(" ");
}
System.out.println(file1.getName());
}else {
for (int i = 0; i < length; i++) {
System.out.print(" ");
}
System.out.println(file1.getName());
//递归调用
test(file1, length+1);
}
}
}