这一章节我们来讨论一下文件目录列表,也复习一下以前的知识点。
注意:这一章节需要一个文件夹,并在文件夹里面建立若干文件,具体怎么建立,就看自己的了。
我的文件夹结构:
-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方法,通过文件目录列表的学习,也复习了以前学习的 一些知识点。
这一章节就到这里,谢谢。
-----------------------------------
从头认识java-16.1 文件目录列表(File类的list())
原文:http://blog.csdn.net/raylee2007/article/details/50462736