16.2.1 基本概念

java.io.File类主要用于描述文件或目录路径的抽象表示信息,可以获取文件或目录的特征信息,
如:大小等。

16.2.2 常用的方法


方法声明
功能概述**

  • File(String pathname) 根据参数指定的路径名来构造对象
  • File(String parent, String child) ``根据参数指定的父路径和子路径信息构造对象
  • File(File parent, String child) 根据参数指定的父抽象路径和子路径信息构造对象
  • boolean exists() 测试此抽象路径名表示的文件或目录是否存在
  • String getName() 用于获取文件的名称
  • long length() ``返回由此抽象路径名表示的文件的长度
  • long lastModifified() 用于获取文件的最后一次修改时间
  • String getAbsolutePath() 用于获取绝对路径信息
  • boolean delete() 用于删除文件,当删除目录时要求是空目录
  • boolean createNewFile() ``用于创建新的空文件
  • boolean mkdir() 用于创建目录
  • boolean mkdirs() 用于创建多级目录
  • File[] listFiles() 获取该目录下的所有内容
  • boolean isFile() 判断是否为文件
  • boolean isDirectory() 判断是否为目录
  • File[] listFiles(FileFilter fifilter) ``获取目录下满足筛选器的所有内容

image.png
此时d盘下面没有a.txt文件,则创建一个。
image.png

再次执行程序时:
image.png
使用 Date 和SimpleDateFormat创建对象,设置日期格式。

4.实现目录的删除和创建
image.png
image.png

目录创建成功。

创建一个多层目录

image.png

image.png
日常工作中,使用删除文件时,需慎重。

获取目录内容并记录搭配数组中
获取目录f3下的内容并记录到一维数组中
image.png
两种方法进行目录的过滤打印
image.png

目录及子目录的遍历打印

image.png
image.png

完整的代码实现:
package com.lagou.task16;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;

public class FileTest {

  1. // 自定义成员方法实现指定目录以及子目录中所有内容的打印
  2. public static void show(File file) {
  3. // 获取目录f3下的所有内容并记录到一维数组中
  4. File[] filesArray = file.listFiles();
  5. // 遍历数组
  6. for (File tf: filesArray) {
  7. String name = tf.getName();
  8. // 判断是否为文件,若是则直接打印文件名称
  9. if (tf.isFile()) {
  10. System.out.println(name);
  11. }
  12. // 若是目录,则使用[]将目录名称括起来
  13. if (tf.isDirectory()) {
  14. System.out.println("[" + name + "]");
  15. show(tf);
  16. }
  17. }
  18. }
  19. public static void main(String[] args) throws IOException {
  20. // 1.构造File类型的对象与d:/a.txt文件关联
  21. File f1 = new File("d:/a.txt");
  22. // 2.若文件存在则获取文件的相关特征信息并打印后删除文件
  23. if (f1.exists()) {
  24. System.out.println("文件的名称是:" + f1.getName());
  25. System.out.println("文件的大小是:" + f1.length());
  26. Date d1 = new Date(f1.lastModified());
  27. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  28. System.out.println("文件的最后一次修改时间:" + sdf.format(d1));
  29. // 绝对路径: 主要指以根目录开始的路径信息,如:c:/ d:/ /..
  30. // 相对路径: 主要指以当前目录所在位置开始的路径信息,如:./ ../ 相对路径
  31. System.out.println("文件的绝对路径信息是:" + f1.getAbsolutePath());
  32. System.out.println(f1.delete()? "文件删除成功": "文件删除失败");
  33. } else {
  34. // 3.若文件不存在则创建新的空文件
  35. System.out.println(f1.createNewFile()? "文件创建成功": "文件创建失败!");
  36. }
  37. System.out.println("---------------------------------------------------------");
  38. // 4.实现目录的删除和创建
  39. File f2 = new File("d:/捣乱/猜猜我是谁/你猜我猜不猜/死鬼");
  40. if (f2.exists()) {
  41. System.out.println("目录名称是:" + f2.getName());
  42. System.out.println(f2.delete()? "目录删除成功": "目录删除失败");
  43. } else {
  44. //System.out.println(f2.mkdir()? "目录创建成功": "目录创建失败"); // 创建单层目录
  45. System.out.println(f2.mkdirs()? "目录创建成功": "目录创建失败"); // 创建多层目录
  46. }
  47. System.out.println("---------------------------------------------------------");
  48. // 5.实现将指定目录中的所有内容打印出来
  49. File f3 = new File("d:/捣乱");
  50. // 获取目录f3下的所有内容并记录到一维数组中
  51. File[] filesArray = f3.listFiles();
  52. // 遍历数组
  53. for (File tf: filesArray) {
  54. String name = tf.getName();
  55. // 判断是否为文件,若是则直接打印文件名称
  56. if (tf.isFile()) {
  57. System.out.println(name);
  58. }
  59. // 若是目录,则使用[]将目录名称括起来
  60. if (tf.isDirectory()) {
  61. System.out.println("[" + name + "]");
  62. }
  63. }
  64. System.out.println("---------------------------------------------------------");
  65. // 6.实现目录中所有内容获取的同时进行过滤
  66. // 匿名内部类的语法格式:接口/父类类型 引用变量名 = new 接口/父类类型() { 方法的重写 };
  67. /*FileFilter fileFilter = new FileFilter() {
  68. @Override
  69. public boolean accept(File pathname) {
  70. // 若文件名是以.avi为结尾,则返回true表示保留 否则返回false就是表示丢弃
  71. return pathname.getName().endsWith(".avi");
  72. }
  73. };*/
  74. // Lambda表达式的格式:(参数列表) -> {方法体}
  75. FileFilter fileFilter = (File pathname) -> {return pathname.getName().endsWith(".avi");};
  76. File[] filesArray2 = f3.listFiles(fileFilter);
  77. for (File tf : filesArray2) {
  78. System.out.println(tf);
  79. }
  80. System.out.println("---------------------------------------------------------");
  81. // 7.使用递归的思想获取目录以及子目录中的内容
  82. show(new File("d:/捣乱"));
  83. }

}
案例题目
遍历指定目录以及子目录中的所有内容并打印出来。