一、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再创建dboolean 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.txtSystem.out.println(file.getAbsolutePath()); //D:\ideaws\abc\test.txtSystem.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);}}
}