Java学习 之 IO流(File , 递归)
1 /* 2 3 File类的构造函数: 4 5 File(File parent , String child) 根据parent抽象路径和child路径名字符串创建一个新File实例 6 7 File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新File实例 8 9 File(String parent , String child) 根据parent路径名字符串和child路径名字符串创建一个新File实例 10 11 */ 12 13 public class FileDemo{ 14 15 public static void main(String[] args){ 16 17 //将parent封装成file对象 18 19 File file = new File("D:\\java\\day1"); 20 21 File f1 = new File(file , "hello.java"); 22 23 System.out.println(f1); 24 25 26 27 File pathName = "D:\\java\\day1\\hello.java"; 28 29 File f2 = new File(pathName); 30 31 System.out.println(f2); 32 33 34 35 File f3 = new File("D:\\java\day1" , "hello.java"); 36 37 System.out.println(f3); 38 39 } 40 41 } 42 43 /* 44 45 File类的获取: 46 47 String getAbsolutePath()返回抽象路径名的绝对路径名字符串 48 49 String getName()返回由此抽象路径名表示的文件或目录的名称 50 51 String getPath()将此抽象路径名转换为一个路径名字符串 52 53 long length()返回由此抽象路径名表示的文件长度 54 55 */ 56 57 public class FileMethodDemo{ 58 59 public static void main(String[] args){ 60 61 //创建文件对象 62 63 File file = new File("Demo22.java"); 64 65 //获取文件的绝对路径,即全路径 66 67 String path = file.getAbsolutePath(); 68 69 //File中封装的路径是什么获取的就是什么 70 71 String paths = file.getPath(); 72 73 //获取文件的名称 74 75 String pathname = file.getName(); 76 77 //获取文件的大小 78 79 long size = file.length(); 80 81 System.out.println("path:" + path); 82 83 System.out.println("paths:" + paths); 84 85 System.out.println("pathname:" + pathname); 86 87 System.out.println("size:" + size); 88 89 } 90 91 } 92 93 94 95 /* 96 97 文件和文件夹的创建删除: 98 99 boolean createNewFile()当且仅当不存在具有此抽象路径名指定名称的文件时,不可分的创建一个新的空文件 100 101 boolean delete() 删除此抽象路径名表示的文件或目录 102 103 boolean exists()判断此抽象路径名表示的文件或目录是否存在 104 105 boolean isDirectory() 判断此抽象路径名表示的文件是否是一个目录 106 107 boolean isFile() 判断此抽象路径名表示的文件是否是一个标准文件 108 109 boolean mkdir()创建此抽象路径名指定的目录 110 111 */ 112 113 public class FileMethodDemo2{ 114 115 public static void main(String[] args){ 116 117 //对文件或者文件夹进行操作 118 119 File file = new File("D:\\file.txt"); 120 121 //创建文件,如果文件不存在则创建,true;如果文件存在则不创建,false;如果路径错误,则抛IOException 122 123 boolean b1 = file.creatNewFile(); 124 125 System.out.println(b1); 126 127 //删除文件 128 129 boolean b2 = file.delete(); 130 131 System.out.println(b2); 132 133 //判断文件是否存在 134 135 boolean b3 = file.exists(); 136 137 System.out.println(b3); 138 139 140 141 //对目录操作 创建,删除,判断 142 143 File dir = new File("D:\\a"); 144 145 //mkdir()创建单个目录,mkdirs()创建多级目录 146 147 boolean b4 = dir.mkdir(); 148 149 System.out.println(b4); 150 151 //删除目录时,如果目录中有内容,无法直接删除 152 153 boolean b5 = dir.delete(); 154 155 //只有将目录中的内容都删除后, 保证目录为空,这时这个目录才可以删除 156 157 System.out.println(b5); 158 159 160 161 //判断文件,目录 162 163 File f = new File("D:\\java");//要判断是否是文件还是目录,必须先判断存在 164 165 System.out.println(f.isFile()); 166 167 System.out.println(f.isDirectory()); 168 169 } 170 171 } 172 173 /* 174 175 listFiles()方法 176 177 String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录 178 179 File[] listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件 180 181 注意:在获取指定目录下的文件或者文件夹时必须满足下面两个条件 182 183 1,指定的目录必须是存在的 184 185 2,指定的必须是目录,否则容易引发返回数组为null,出现NullPointerException 186 187 */ 188 189 public class FileMethodDemo3{ 190 191 public static void main(String[] args){ 192 193 File dir = new File("e:\\java"); 194 195 //获取的是目录下的当前的文件以及文件夹的名称 196 197 String[] name = dir.list(); 198 199 for(String name : names){ 200 201 System.out.println(name); 202 203 } 204 205 //获取目录下当前文件以及文件对象,只要拿到了文件对象,那么就可以获取其中想要的信息 206 207 File[] files = dir.listFiles(); 208 209 for(File f : files){ 210 211 System.out.println(f); 212 213 } 214 215 } 216 217 } 218 219 /* 220 221 文件过滤器: 222 223 File[] listFiles(FilenameFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录 224 225 接口FilenameFilter实现此接口的类实例可用于过滤器文件名 226 227 boolean accept(File dir , String name)测试指定文件是否包含在某一文件列表中 228 229 File[] listFiles(FileFilter filter)返回抽象路径名数组,这些路径名表示抽象路径名表示的目录中满足指定过滤器的文件和目录 230 231 boolean accept(File pathname)测试指定抽象路径名是否应该包含在某个路径名的列表中 232 233 FilenameFilter过滤器中的accept方法接受两个参数,一个当前文件或文件夹所在的路径,一个是当前文件或文件夹对象的名称 234 235 FileFilter过滤器中的accept方法接受一个参数,这个参数就当前文件或文件夹对象 236 237 */ 238 239 public class FileDemo1{ 240 241 public staitc void main(String[] args){ 242 243 //获取扩展名为.java文件 244 245 //创建File对象 246 247 File file = new File("D:\\java\\day1"); 248 249 //获取指定扩展名的文件,由于要对所有文件进行扩展名筛选,因此调用方法需要传递过滤器 250 251 File[] files = file.listFiles(new MyFileFilter()); 252 253 //遍历获取到的所有符合条件的文件 254 255 for(File f : files){ 256 257 System.out.println(f); 258 259 } 260 261 } 262 263 } 264 265 //自定义类继承FilenameFilter过滤接口 266 267 public class MyFileFilter implements FilenameFilter{ 268 269 public boolean accept(File dir , String name){ 270 271 return name.endsWith(".java"); 272 273 } 274 275 } 276 277 278 279 public class FileDemo2{ 280 281 public staitc void main(String[] args){ 282 283 //创建File对象 284 285 File file = new File("D:\\java\\day2"); 286 287 //获取指定扩展名的文件,由于要对所有文件进行扩展名筛选,因此调用方法需要传递过滤器 288 289 File[] files = file.listFiles(new FileFilter()); 290 291 //遍历获取到的所有符合条件的文件 292 293 for(File f : files){ 294 295 System.out.println(f); 296 297 } 298 299 } 300 301 } 302 303 //自定义类继承FileFilter过滤接口 304 305 public class FileFilter implements FileFilter{ 306 307 //文件过滤器 308 309 public boolean accept(File pathname){ 310 311 return pathname.isDirectory(); 312 313 } 314 315 } 316 317 318 319 /* 320 321 递归:方法定义中调用方法本身的现象;直接递归、间接递归 322 323 注意实现: 324 325 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。 326 327 在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出 328 329 */ 330 331 //直接递归 332 333 public void methodA(){ 334 335 methodA(); 336 337 } 338 339 //间接递归 340 341 public void methodB(){ 342 343 methodC(); 344 345 } 346 347 public void methodC(){ 348 349 methodB(); 350 351 }