从头认识java-16.1 文件目录列表(File类的list())

这一章节我们来讨论一下文件目录列表,也复习一下以前的知识点。

注意:这一章节需要一个文件夹,并在文件夹里面建立若干文件,具体怎么建立,就看自己的了。

我的文件夹结构:

-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方法,通过文件目录列表的学习,也复习了以前学习的 一些知识点。


这一章节就到这里,谢谢。

-----------------------------------

目录




你可能感兴趣的:(java)