package Demo42;
/*
需求:遍历E:\\hadoop文件夹及其子文件
可以使用过滤器来实现
在File中有两个和ListFiles重载的方法,方法参数传递就是过滤器
File[ ] ListFiles( FileFilter filter)
java.io.FileFilter接口,用于抽象路径名( File对象) 的过滤器。
作用:过滤文件( File对象)
抽象方法:过滤文件的方法
boolean accept( File pathname) 测试指定抽象路径名是否应该包含在某个路径名的列表中
参数:
File pathname:使用ListFiles方法遍历目录,得到每一个文件对象
File[ ] ListFiles( FilenameFilter filter)
java.io.FilenameFilter接口: 实现此接口的类实例可用于过滤文件名。
作用:过滤文件的名称
抽象方法:过滤文件的方法
boolean accept( File dir, String name) 测试指定文件是否应该包含在某以文件列表中
参数:
File dir:构造方法中传递的呗遍历的目录
String name:使用ListFiles方法遍历目录,获取每一个文件/文件夹的名称
俩个过滤器是没有实现类的: 需要自己重写,定义过滤的规则重写过滤的方法
*/
public class DemoFilter {
}
package Demo42;
/*
递归:方法自己调用自己
-分类:
直接递归
间接递归
注意事项:
递归一定有条件限制,保证能停下来,否则会有栈内存溢出的异常
递归不能次数太多,否则会有栈内存溢出的异常
构造方法不能递归: 因为构造方法是创建对象的时候使用的,一直递归会导致内存中有无数个对象,直接编译就会报错
递归的使用前提:
当调用方法的时候,方法的主体不变,每次调用方法的参数不同,可以使用递归
*/
public class DemoRecurison {
public static void main( String[ ] args) {
// a( ) ;
b( 1) ;
}
private static void b( int i) {
System.out.println( i) ;
if( i== 10000) {
return ;
}
b( ++i) ;
}
//这个会报栈内存溢出异常
// private static void a( ) {
// System.out.println( "a方法" ) ;
// a( ) ;
// }
}
package Demo42;
/*
练习:
使用递归计算1-n之间的和
*/
public class DemoRecurison01 {
public static void main( String[ ] args) {
int s = sum( 3) ;
System.out.println( s) ;
}
/*
定义一个方法,使用递归计算1-n之间的和
已知:
最大值:n
最小值:1
必须明确:
1、递归的结束条件:获取到1的时候结束
2、递归的目的:获取下图个被家的数字( n-1)
*/
public static int sum( int n) {
if( n== 1) {
return 1;
}
//获取下一个被加的数字( n-1)
return n + sum( n-1) ;
}
}
package Demo42;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
/*
练习: 递归打印多级目录
需求:遍历E:\\hadoop文件夹及其子文件
*/
public class DemoRecurison02 {
public static void main( String[ ] args) {
getAllFile( new File( "E:\\hadoop\\testfile" )) ;
}
//定义一个方法,参数传递File类型的目录
public static void getAllFile( File dir) {
System.out.println( dir) ;
//使用匿名内部类优化代码
// File[ ] files = dir.listFiles( new FileFilter( ) {
// @Override
// public boolean accept( File pathname) {
// return pathname.getName( ) .endsWith( ".json" ) ;
// }
// } ) ;
//使用Lambda表示
File[ ] files = dir.listFiles(( File d, String name) -> {
return new File( d,name) .getName( ) .endsWith( ".json" ) ;
} ) ;
// File[ ] files = dir.listFiles( new FilenameFilter( ) {
// @Override
// public boolean accept( File dir, String name) {
// return new File( dir,name) .isDirectory( ) || name.endsWith( ".json" ) ;
// }
// } ) ;
//传递过滤器对象
//File[ ] files = dir.listFiles( new FileFilterImpl( )) ; //传递过滤器对象
for ( File file : files) {
//如果是一个文件夹,则继续遍历,递归
if ( file.isDirectory( )) {
getAllFile( file) ;
} else {
System.out.println( file) ;
// //是一个文件则直接输出
// //如果只要.json结束的文件
// String s = file.toString( ) ;
// boolean b = s.endsWith( ".json" ) ;
// if( b) {
// System.out.println( file) ;
// }
}
}
}
}
package Demo42;
import java.io.File;
import java.io.FileFilter;
/*
创建过滤器FIleFilter的实现类,重写过滤的方法accept,定义过滤规则
*/
public class FileFilterImpl implements FileFilter {
@Override
public boolean accept( File pathname) {
return pathname.getName( ) .endsWith( ".json" ) ;
}
}