Day19-IO(1)

总结

我是最棒的!基础不牢,地动山摇!

File类

三个常用的构造方法

/*
    File(File parent, String child) 
    从父抽象路径名和子路径名字符串创建新的 File实例。  
    File(String pathname) 
    通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。  
    File(String parent, String child) 
    从父路径名字符串和子路径名字符串创建新的 File实例。  
*/

常用方法参见API

API File类

五个重要的方法

/*
		 * 重要方法:
		 * 	1.String[] list()获取当前文件夹下所有的子文件夹或者子文件的名
			2.File[] listFiles() 获取当前文件夹下所有的子文件夹或者子文件对象
			
			3.String[] list(FilenameFilter filter) 
				获取根据文件名过滤后的文件名
				FilenameFilter:文件名过滤器
			4.File[] listFiles(FileFilter filter)
				获取根据文件过滤后的文件对象
				FileFilter:
			5.File[] listFiles(FilenameFilter filter)
				获取根据文件名过滤后的文件对象
				FilenameFilter:
*/

使用匿名内部类的方式使用后面三种方法

package cn.itsource.file;

import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.util.Arrays;

public class FileTest2 {

	public static void main(String[] args) {
		/*
		 * 重要方法:
		 * 	1.String[] list()获取当前文件夹下所有的子文件夹或者子文件的名
			2.File[] listFiles() 获取当前文件夹下所有的子文件夹或者子文件对象
			
			3.String[] list(FilenameFilter filter) 
				获取根据文件名过滤后的文件名
				FilenameFilter:文件名过滤器
			4.File[] listFiles(FileFilter filter)
				获取根据文件过滤后的文件对象
				FileFilter:
			5.File[] listFiles(FilenameFilter filter)
				获取根据文件名过滤后的文件对象
				FilenameFilter:
		 */
		File file = new File("F:/test");
		String[] list = file.list();
		System.out.println(Arrays.toString(list));
		
		File[] files = file.listFiles();
		System.out.println(Arrays.toString(files));
		
		String[] list2 = file.list(new FilenameFilter() {
			
			@Override
			public boolean accept(File dir, String name) {
				if(name.endsWith(".txt")){
					return true;
				}
				return false;
			}
		});
		
		System.out.println(Arrays.toString(list2));
		
		File[] list3 = file.listFiles(new FileFilter() {

			@Override
			public boolean accept(File pathname) {
                //pathname是File对象的名字
				if(pathname.getName().endsWith(".txt")){
					return true;
				}
				return false;
			}
		});
		
		System.out.println(Arrays.toString(list3));
		
		/*5.File[] listFiles(FilenameFilter filter)
		获取根据文件名过滤后的文件对象
		FilenameFilter:*/
		File[] list4 = file.listFiles(new FilenameFilter() {
			
			@Override
			public boolean accept(File dir, String name) {
                //dir是File对象,name是文件名
				if(name.endsWith(".txt")){
					return true;
				}
				return false;
			}
		});
		
		System.out.println(Arrays.toString(list4));
		
	}

}

递归

递归实质是自己调用自己,前提是必须要有出口(终止条件),适合数据量比较少,递归的层级比较少。能用for循环就不要用递归,因为递归非常占用栈资源

使用场景

  1. 树状结构遍历,比如菜单

  2. 有相似或者相同的业务场景

递归的核心

  1. 数值带入,查看规律
  2. 查看相同业务的代码,在此处用条件判断的方式,调用自己的方法

递归查找一个文件夹下指定后缀的所有文件

package cn.itsource.file;

import java.io.File;

public class RecursionTest {

	public static void main(String[] args) {
		File file = new File("F:/test");
		printFiles(file, ".txt");
	}
	
	/**
	 * 打印file目录下的所有后缀为suffix的文件
	 * @param file
	 * @param suffix
	 */
	public static void printFiles(File file,String suffix){
		if(file == null || !file.exists()){
			return;
		}
		File[] files = file.listFiles();
		if(files != null){
			for (File f : files) {
				if(f.isFile() && f.getName().endsWith(suffix)){
					System.out.println(f.getName());
				}else if(f.isDirectory()){
					printFiles(f, suffix);
				}
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/t384061961/article/details/100085966