递归
package ThreadGoOn;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println("菲波那切数列第"+(n+1)+"项是"+fibo(n));
System.out.println(n+"的阶乘是"+method1(n));
System.out.println(n+"的累加和是"+method2(n));
}
public static int fibo(int n) {
if(n==0 || n==1){
return 1;
}else {
return fibo(n-1)+fibo(n-2);
}
}
public static int method1(int n){
if(n==1) {
return 1;
}else {
return method1(n-1) * n;
}
}
public static int method2(int n){
if(n==1){
return 1;
}else{
return method2(n-1)+n;
}
}
}
递归打印多级目录
package FileStudy;
import java.io.File;
public class FileMain {
public static void main(String[] args) {
File f = new File("C:\\Users\\hpuzjh\\Documents\\Tencent Files\\1654016769\\FileRecv");
getAllFiles(f);
}
public static void getAllFiles(File dir) {
for (File file : dir.listFiles()) {
if(file.isDirectory()){
getAllFiles(file);
}else {
System.out.println(file.getAbsoluteFile());
}
}
}
}
文件搜索
使用递归搜索所有的Python文件
有三种方法可以将File类型转换成为String类型
getName、getPath、toString方法,其中getPath方法其实就是调用的toString方法。
package FileStudy;
import java.io.File;
public class FileMain {
public static void main(String[] args) {
File f = new File("C:\\Users\\hpuzjh\\Documents\\Tencent Files\\1654016769\\FileRecv");
getAllFiles(f);
}
public static void getAllFiles(File dir) {
for (File file : dir.listFiles()) {
if(file.isDirectory()){
getAllFiles(file);
}else {
String name = file.getName();
if(name.endsWith(".py")){
System.out.println(file.getAbsoluteFile());
}
}
}
}
}
FileFilter过滤器
原理https://www.bilibili.com/video/av55246614?p=347
使用文件过滤器优化文件搜索
重写FileFilter接口实现类中的accept方法,可以写实现类实现,也可使用匿名内部类,接口中只有一个抽象方法也可使用lamda表达式
package FileStudy;
import java.io.File;
import java.io.FileFilter;
public class FileMain {
public static void main(String[] args) {
File f = new File("C:\\Users\\hpuzjh\\Documents\\Tencent Files\\1654016769\\FileRecv");
getAllFiles(f);
}
public static void getAllFiles(File dir) {
File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
return file.getName().toLowerCase().endsWith(".py");
}
});
for (File file : files) {
if(file.isDirectory()){
getAllFiles(file);
}else {
System.out.println(file);
}
}
}
}
使用lamda表达式
FilenameFilter过滤器
重写FileNameFilter接口实现类中的accept方法,自己写过滤规则。和上面的accept方法的参数列表不一样,有两个参数
使用文件过滤器优化(匿名内部类实现接口)
package FileStudy;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
public class FileMain {
public static void main(String[] args) {
File f = new File("C:\\Users\\hpuzjh\\Documents\\Tencent Files\\1654016769\\FileRecv");
getAllFiles(f);
}
public static void getAllFiles(File dir) {
File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File file, String s) {
return new File(file,s).getName().toLowerCase().endsWith(".py");
}
});
for (File file : files) {
if(file.isDirectory()){
getAllFiles(file);
}else {
System.out.println(file);
}
}
}
}
使用lamda表达式