Java-File类、递归-第19节
程序员文章站
2022-06-17 09:05:05
...
学习目标:
- 熟练使用File类,能够实现创建与删除文件文件夹操作;
- 掌握常用的搜索文件夹或者文件的方法;
- 理解递归的概念,并熟练使用递归完成搜索工作。
学习内容:
一、File类
-
1、简介
a、java.io.File b、对文件或文件夹(目录)的封装类
-
2、主要功能
a、创建文件、文件夹 b、删除文件、文件夹 c、查找文件、文件夹 d、判断是否存在文件、文件夹 e、遍历文件夹(目录) f、获取文件的大小
-
3、静态成员变量
a、pathSeparator - Static String pathSeparator; - 路径分隔符,window-; linux-: b、pathSeparatorChar - Static Char pathSeparatorChar; - 转换成字符的路径分隔符 c、fileSeparator - Static String fileSeparator; - 文件夹名称分隔符,window-\ linux-/ PS: 程序中的路径不能写死----> "c:"+File.fileSeparator+"File"+File.fileSeparator+"name"
-
4、路径
a、路径不区分大小写 b、windows中路径的文件名称用反斜杠分割,反斜杠是转义字符,两个反斜杠表示一个普通的反斜杠
-
5、构造方法
a、File(String pathString); # 创建对应字符串路径的文件对象 b、File(String parent, String child); # 将字符串路径分为父与子两部分进行拼接 c、File(File parent, String child); # 将字符串路径分为父类文件对象与子类字符串进行拼接
-
6、成员方法
a、获取类功能 - public String getAbsolutePath(); # 获取绝对路径 - public String getPath(); # 获取File对象传递的路径 - public String getName(); # 获取文件或文件夹的名字 - public Long length(); # 获取文件的大小(kb) 注意:文件夹与不存在的路径的大小都是0 b、判断类功能 - public boolean exists(); # 判断路径是否存在 - public boolean isDirectory(); # 判断是不是文件夹 - public boolean isFile(); # 判断是不是文件 注意: 如果路径不存在,下面的两个判断都是false c、创建删除功能 - public boolean createNewFile(); # 创建文件,如果存在不创建,返回false 如果创建文件的路径不存在,抛出异常 - public boolean mkdir(); # 创建目录,单级目录 - public boolean mkdirs(); # 创建目录,单级或多级目录 - public boolean delete(); # 删除文件或文件夹,文件夹有内容不会删除,而且是不经过 回收站的直接删除 d、遍历功能 - public String[] list(); # 遍历目录下的所有文件与文件夹,并转换成字符串数组 - public File[] listFiles(); # 遍历目录下的所有文件与文件夹,并转换成File对象数组 注意: - 当目录不存在或者是一个文件时,会报空指针异常 - 两种方法都可以显示隐藏起来的文件与文件夹
二、递归
-
1、简介
a、概念 自己调用自己 b、分类 - 直接递归:自己调用自己 - 间接递归:A调用B,B调用C,C调用A c、注意事项 - 递归一定要有条件限制,保证其能够停下来,防止发生栈内存溢出;
- 递归的次数不能太多,否则也会发生栈内存溢出;
- 构造方法,禁止递归。
d、使用前提
- 调用方法时,主体不变,参数变化
学习产出:
1、File 静态成员变量
package mypackage.day15.demo01;
import java.io.File;
public class FileStaticVar {
public static void main(String[] args) {
System.out.println(File.separator);
System.out.println(File.separatorChar);
System.out.println(File.pathSeparator);
System.out.println(File.pathSeparatorChar);
System.out.println("C:"+File.separator+"a.txt");
}
}
2、File构造方法
package mypackage.day15.demo01;
import java.io.File;
public class FileConstruct {
public static void main(String[] args) {
construct1();
construct2();
construct3();
}
private static void construct3() {
File subfile = new File("D:\\Aplication\\WeChat\\StoreFile");
File file = new File(subfile, "WeChat Files\\wxid_nqv5pfqxwpdh21\\FileStorage\\File\\2020-10");
System.out.println(file);
}
private static void construct2() {
File file = new File("D:\\Aplication\\WeChat\\StoreFile",
"WeChat Files\\wxid_nqv5pfqxwpdh21\\FileStorage\\File\\2020-10");
System.out.println(file);
}
private static void construct1() {
File file = new File("D:\\Aplication\\WeChat\\StoreFile" +
"\\WeChat Files\\wxid_nqv5pfqxwpdh21\\FileStorage\\File\\2020-10");
System.out.println(file);
}
}
3、 File成员方法
package mypackage.day15.demo02;
import java.io.File;
import java.io.IOException;
public class FileMemberMethod {
public static void main(String[] args) throws IOException {
File file = new File("D:\\Aplication\\WeChat\\StoreFile");
System.out.println("====get====");
mem1(file);
System.out.println("====judge====");
mem2(file);
System.out.println("====create and delete====");
mem3(file);
System.out.println("====look====");
mem4();
}
private static void mem4() {
File file = new File("D:\\Aplication\\WeChat\\StoreFile\\WeChat Files\\All Users");
String[] list = file.list();
for (String s : list) {
System.out.println(s);
}
File[] files = file.listFiles();
for (File file1 : files) {
System.out.println(file1);
}
}
private static void mem3(File file) throws IOException {
File file1 = new File(file, "\\test\\abc");
System.out.println(file1.mkdirs());
System.out.println(file1.mkdir());
System.out.println(file1.createNewFile());
System.out.println(file1.delete());
}
private static void mem2(File file) {
System.out.println(file.exists());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
}
private static void mem1(File file) {
System.out.println(file.getAbsolutePath());
System.out.println(file.getAbsoluteFile());
System.out.println(file.getPath());
System.out.println(file.getName());
System.out.println(file.length());
}
}
4、练习:使用递归计算1-n之间的和
package mypackage.day15.demo03;
import java.io.File;
import java.io.IOException;
public class RecursionExecise1 {
public static void main(String[] args) {
int sum = sum(100);
System.out.println(sum);
}
private static int sum(int i) {
if (i==1){
return 1;
}
return i+sum(i-1);
}
}
5、练习:使用递归计算n的阶乘
package mypackage.day15.demo03;
public class RecursionExecise2 {
public static void main(String[] args) {
int jiecheng = jc(5);
System.out.println(jiecheng);
}
private static int jc(int i) {
if (i==1){
return 1;
}
return i*jc(i-1);
}
}
6、练习:递归打印多级目录
package mypackage.day15.demo03;
import java.io.File;
public class RecursionExecise3 {
public static void main(String[] args) {
File file = new File("D:\\Aplication\\WeChat\\StoreFile\\WeChat Files\\All Users");
getFilesName(file);
}
private static void getFilesName(File file) {
System.out.println(file);
if (file.isDirectory()){
File[] files = file.listFiles();
for (File file1 : files) {
if (file1.isDirectory()){
getFilesName(file1);
}else {
System.out.println(file1);
}
}
}
}
}
7、练习:文件搜索
package mypackage.day15.demo03;
import java.io.File;
public class RecursionExecise4 {
public static void main(String[] args) {
File file = new File("D:\\Aplication\\WeChat\\StoreFile\\WeChat Files\\All Users");
findFilesName(file);
}
private static void findFilesName(File file) {
if (file.isDirectory()){
File[] files = file.listFiles();
for (File file1 : files) {
if (file1.isDirectory()){
findFilesName(file1);
}else {
if (file1.toString().endsWith(".jpg")){
System.out.println(file1);
}
}
}
}
}
}
8、过滤器的使用
package mypackage.day15.demo03;
import java.io.File;
import java.io.FileFilter;
public class RecursionExecise5 {
public static void main(String[] args) {
File file = new File("D:\\Aplication\\WeChat\\StoreFile\\WeChat Files\\All Users");
findFilesName(file);
}
private static void findFilesName(File file) {
File[] files1 = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.isDirectory()){
findFilesName(pathname);
return false;
}else {
if (pathname.toString().endsWith(".jpg")){
return true;
}
return false;
}
}
});
for (File file1 : files1) {
System.out.println(file1);
}
}
}
9、练习:用过滤器进行文件搜索
package mypackage.day15.demo03;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
public class RecursionExecise6 {
public static void main(String[] args) {
File file = new File("D:\\Aplication\\WeChat\\StoreFile\\WeChat Files\\All Users");
findFilesName(file);
}
private static void findFilesName(File file) {
// File[] files1 = file.listFiles(new FilenameFilter() {
// @Override
// public boolean accept(File dir, String name) {
// File pathname = new File(dir, name);
// if (pathname.isDirectory()){
// findFilesName(pathname);
// return false;
// }else {
// if (pathname.toString().endsWith(".jpg")){
// return true;
// }
// return false;
// }
// }
// });
File[] files1 = file.listFiles((dir, name)->{
return dir.toString().endsWith(".jpg") || name.endsWith(".jpg");
}
);
for (File file1 : files1) {
System.out.println(file1);
}
}
}
推荐阅读