这一章节我们来讨论一下文件目录列表,也复习一下以前的知识点。
注意:这一章节需要一个文件夹,并在文件夹里面建立若干文件,具体怎么建立,就看自己的了。
我的文件夹结构:
-ch16
|-Test
|-Test.java
|-Test0 - 副本
|-Test2
|-Test2 - 副本
|-Test3
|-Test3 - 副本
|-Test_0
1.File类的list()方法
这个方法的作用就是扫描某个目录下面的所有文件和文件夹
package com.ray.ch16; import java.io.File; public class Test { public static void main(String[] args) { File file = new File("F:\\ws101\\ThinkInJava\\src\\com\\ray\\ch16"); String[] paths = file.list(); for (String path : paths) { System.out.println(path); } } }
输出:
Test
Test.java
Test0 - 副本
Test2
Test2 - 副本
Test3
Test3 - 副本
Test_0
package com.ray.ch16; import java.io.File; import java.util.Arrays; public class Test_0 { public static void main(String[] args) { File file = new File("F:\\ws101\\ThinkInJava\\src\\com\\ray\\ch16"); String[] paths = file.list(); Arrays.sort(paths, String.CASE_INSENSITIVE_ORDER);//增加了按照字母排序 for (String path : paths) { System.out.println(path); } } }
Test
Test.java
Test0 - 副本
Test2
Test2 - 副本
Test3
Test3 - 副本
Test_0
3.在上面的基础上增加名字过滤器(复习接口的实现)
package com.ray.ch16; import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { File file = new File("F:\\ws101\\ThinkInJava\\src\\com\\ray\\ch16"); String[] paths = file.list(); for (String path : paths) { System.out.println(path); } Arrays.sort(paths, String.CASE_INSENSITIVE_ORDER); System.out.println("----------------"); String[] paths2 = file.list(new MyFileNameFilter("[A-za-z]+.java")); for (String path : paths2) { System.out.println(path); } } } class MyFileNameFilter implements FilenameFilter { private Pattern pattern; public MyFileNameFilter(String regex) { pattern = Pattern.compile(regex); } @Override public boolean accept(File dir, String name) { return pattern.matcher(name).matches(); } }
Test
Test.java
Test0 - 副本
Test2
Test2 - 副本
Test3
Test3 - 副本
Test_0
----------------
Test.java
上面的打码通过实现FilenameFilter接口来控制输出的文件名。
4.修改上面的代码,通过匿名内部类实现
package com.ray.ch16; import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; import java.util.regex.Pattern; public class Test { public static FilenameFilter filter(final String regex) { return new FilenameFilter() { private Pattern pattern = Pattern.compile(regex); @Override public boolean accept(File dir, String name) { return pattern.matcher(name).matches(); } }; } public static void main(String[] args) { File file = new File("F:\\ws101\\ThinkInJava\\src\\com\\ray\\ch16"); String[] paths = file.list(); for (String path : paths) { System.out.println(path); } Arrays.sort(paths, String.CASE_INSENSITIVE_ORDER); System.out.println("----------------"); String[] paths2 = file.list(filter("[A-za-z]+.java")); for (String path : paths2) { System.out.println(path); } } }
输出:
Test
Test.java
Test0 - 副本
Test2
Test2 - 副本
Test3
Test3 - 副本
Test_0
----------------
Test.java
5.在修改上面的代码,使得更加精简
package com.ray.ch16; import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { File file = new File("F:\\ws101\\ThinkInJava\\src\\com\\ray\\ch16"); String[] paths = file.list(); for (String path : paths) { System.out.println(path); } Arrays.sort(paths, String.CASE_INSENSITIVE_ORDER); System.out.println("----------------"); final String regex = "[A-za-z]+.java"; String[] paths2 = file.list(new FilenameFilter() { private Pattern pattern = Pattern.compile(regex); @Override public boolean accept(File dir, String name) { return pattern.matcher(name).matches(); } }); for (String path : paths2) { System.out.println(path); } } }
输出:
Test
Test.java
Test0 - 副本
Test2
Test2 - 副本
Test3
Test3 - 副本
Test_0
----------------
Test.java
总结:这一章节主要讲述File里面的list方法,通过文件目录列表的学习,也复习了以前学习的 一些知识点。
这一章节就到这里,谢谢。
-----------------------------------
目录