这一章节我们来讨论一下文件目录列表,也复习一下以前的知识点。
注意:这一章节需要一个文件夹,并在文件夹里面建立若干文件,具体怎么建立,就看自己的了。
我的文件夹结构:
-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
2.在上面的代码里面增加按字母排序
- 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方法,通过文件目录列表的学习,也复习了以前学习的 一些知识点。
这一章节就到这里,谢谢。