JavaSE: File类
1. 基本概念
java.io.File 类主要用于描述文件或目录路径的抽象表示信息,可以获取文件或目录的特征信息,如: 大小等。
2. 常用方法
方法声明 功能描述
<1>File(String pathname) 根据参数指定的路径名来构造对象
<2>File(String parent, String child) 根据参数指定的父路径和子路径信息构造对象
<3>File(File parent, String child) 根据参数指定的父抽象路径和子路径信息构造对象
<4>boolean exists() 测试此抽象路径名表示的文件或目录是否存在
<5>String getName() 用于获取文件的名称
<6>long length() 返回由此抽象路径名表示的文件的长度
<7>long lastModified() 用于获取文件的最后一次修改时间
<8>String getAbsolutePath() 用于获取绝对路径信息
<9>boolean delete() 用于删除文件,当删除目录是要求是空目录
<10>boolean createNewFile() 用于创建新的空文件
<11>boolean mkdir() 用于创建目录
<12>boolean mkdirs() 用于创建多级目录
<13>File[] listFiles() 获取该目录下的所有内容
<14>boolean isFile() 判断是否为文件
<15>boolean isDirectory() 判断是否为目录
<16>File[] listFiles(FileFilter filter) 获取目录下满足筛选器的所有内容
3. 案例题目
遍历指定目录以及子目录中的所有内容并打印出来
思路:
1 class FileTest{ 2 3 4 5 // 自定义成员方法,实现指定目录以及子目录中,所有内容的打印 6 7 public static void show(File file){ 8 9 // 获取目录f3下的所有内容,并记录到一维数组中 10 11 File[] filesArray = file.listFiles(); 12 13 // 遍历数组 14 15 for (File tf : filesArray){ 16 17 String name = tf.getName(); 18 19 // 判断是否为文件,若是则直接打印文件名称 20 21 if ( tf.isFile() ){ 22 23 println(name); 24 25 } 26 27 // 若是目录,则使用[]将目录名称括起来 28 29 if (tf.isDirectory()){ 30 31 println("[" + name + "]"); 32 33 show(tf); 34 35 } 36 37 } 38 39 } 40 41 42 43 main() throws IOException { 44 45 46 47 // 1. 构造File类型的对象,与 d:/a.txt 文件关联 48 49 File f1 = new File("d:/a.txt"); 50 51 // 2. 若文件存在,则获取文件的相关特征信息,并打印,随后删除文件 52 53 if (f1.exists()) { 54 55 println("文件名称:" + f1.getName() ); 56 57 println("文件大小:" + f1.length() ); 58 59 Date d1 = new Date(f1.lastModified()); 60 61 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 62 63 println("文件的最后一次修改时间:" + sdf.format(d1)); 64 65 // 绝对路径: 以根目录开始的路径信息,如: c:/ d:/ /.. 66 67 // 相对路径: 以当前目录所在位置开始的路径信息,如:./ ../ 相对路径 68 69 println("文件的绝对路径信息是:" + f1.getAbsolutePath()); 70 71 println(f1.delete() ? "文件删除成功":“文件创建失败!”); 72 73 }else{ 74 75 // 3. 若文件不存在,则创建新的空文件 76 77 println(f1.createNewFile() ? "文件创建成功" : "文件创建失败"); 78 79 } 80 81 82 83 // 4. 实现目录的删除和创建 84 85 File f2 = new File("d:/捣乱/猜猜我是谁/你猜我不猜/死鬼"); 86 87 if (f2.exists()){ 88 89 println("目录名称是:" + f2.getName()); 90 91 println(f2.delete() ? "目录删除成功":“目录删除失败”); 92 93 } else{ 94 95 //println(f2.mkdir()?"目录创建成功":"目录创建失败"); // 创建单层目录 96 97 println(f2.mkdirs()?“目录创建成功”:"目录创建失败"); // 创建多层目录 98 99 } 100 101 102 103 // 5. 实现将指定目录中的所有内容打印出来 104 105 File f3 = new File("d:/捣乱"); 106 107 // 获取目录f3下的所有内容,并记录到一维数组中 108 109 File[] filesArray = f3.listFiles(); 110 111 // 遍历数组 112 113 for(File tf: filesArray){ 114 115 String name = tf.getName(); 116 117 // 判断是否为文件,若是则直接打印文件名称 118 119 if (tf.isFile()) { 120 121 println(name); 122 123 } 124 125 // 若是目录,则使用[]将目录名称括起来 126 127 if (tf.isDirectory()){ 128 129 println("[" + name + "]"); 130 131 } 132 133 } 134 135 136 137 // 6. 实现目录中所有内容的获取,同时进行过滤 138 139 // 匿名内部类的语法格式:接口 / 父类类型 引用变量名 = new 接口/父类类型() {方法的重写}; 140 141 /* FileFilter fileFilter = new FileFilter(){ 142 143 @Override 144 145 public boolean accept(File pathname){ 146 147 // 若文件名是以 .avi为结尾,则返回true表示保留,否则,返回false (表示丢弃) 148 149 return pathname.getName().endsWith(".avi"); 150 151 } 152 153 } ; 154 155 */ 156 157 158 159 // Lambda 表达式的格式:(参数列表) -> {方法体} 160 161 FileFilter fileFilter = (File pathname) -> {return pathname.getName().endsWith(".avi");}; 162 163 File[] filesArray2 = f3.listFiles(fileFilter); 164 165 for(File tf : filesArray2){ 166 167 println(tf); 168 169 } 170 171 172 173 // 7. 使用递归的思想,获取目录,以及子目录中的内容 174 175 show(new File("d:/捣乱")); 176 177 } 178 179 }