对于通过java对文件继续读取和写入的操作推荐看读取文件和写入文件操作
题目
扫描指定目录中的文件,并找到名称中包含指定字符的所有普通文件(不包括目录),并后续询问用户是否要删除该文件
题目分析
实际上题目就要求我们对一个指定的目录下的文件进行遍历,并找出文件名称中带有指定字符的普通文件,并询问用户是否需要删除该文件
代码展示
package 文件操作;
import java.io.File;
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:
* User: wuyulin
* Date: 2023-08-07
* Time: 11:23
*/
//文件操作练习
//扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包括目录),并后续询问用户是否要删除该文件
public class Demo5 {
private static Scanner scanner=new Scanner(System.in);
public static void main(String[] args) {
System.out.print("请输入要进行查找的根目录路径:");
//将用户输入的根目录地址作为参数实例化一个File类型的对象
File rootDir=new File(scanner.next());
if(!rootDir.isDirectory()){
System.out.println("输入的路径不是一个合法目录");
return;
}
System.out.print("请输入要删除的文件的关键字:");
String word=scanner.next();
//开始遍历目录中的数据
recurDir(rootDir,word);
}
//通过深度优先遍历去递归遍历完目录中的数据
private static void recurDir(File rootDir,String word){
//通过listFiles方法获得rootDir根目录下的所有文件
File[] files=rootDir.listFiles();
//当目录是非法的目录,或是空的目录就直接return
if(files==null||files.length==0){
return;
}
for(File f:files){
//打印每一个遍历到的文件的路径,进行监视
System.out.println(f.getAbsolutePath());
//当前遍历到的这个文件是目录的话就要递归进入这个目录,去遍历该目录中的内容
if(f.isDirectory()){
recurDir(f,word);
}else { //当前遍历到的文件是普通文件,就要判断是否含有关键词,是否需要删除
deleteFile(f,word);
}
}
}
private static void deleteFile(File file,String word){
if(!file.getName().contains(word)){
return;
}
System.out.println("找到了"+file.getAbsolutePath()+"文件,是否需要删除(Y/N)");
String choice=scanner.next();
//choice是一个String类型的对象,所以choice是一个引用,指向String对象所在内存空间的地址
//所以String类型的对象进行比较要使用equals
if(choice.equals("y")||choice.equals("Y")){
file.delete();
}
}
}
1,首先对于指定目录下文件的遍历,采用的是深度优先遍历的思想,当我们遍历文件的时候要是遇到的是普通的文件,就判断名称是否含有指定字符,要是遇到目录,就要进行递归,进入目录中遍历该目录中的文件,继续进行相同的操作
2.通过目录对象调用listFiles方法可以获得该目录下所有的文件,将其存入文件数组中,遍历文件数组中的每一个文件,当该文件是目录,那么就要进行递归,进入该目录中进行相同的操作,要是该文件是普通文件,就要进行判断,询问用户,删除等操作
3.在deleteFile方法中,通过file.getName().contains(word)获得文件的名称并判断文件名称中是否含有指定字符word
4.当判断用户输入的时候由于choice是String类型,是对象,所以choice只是一个引用(地址),所以不能直接用==来判断是否相等,要通过调用equals方法才能判断值是否相等。