8/22 Java学习博客 文件练习
扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件
先分析得出
1.list 列出目录内容
2.判定文件类型
3.删除文件
找到目录中的所有文件,以及子目录中的所有文件.只要遇到子目录都能往里找,用"递归"的方式,把所有的子目录都给扫描一遍~~
public static Scanner scanner = new Scanner(System.in);
//1.先让用户输入要扫描的目录
System.out.println("请输入要扫描的路径:");
String path = scanner.next();
File rootPath = new File(path);
if(!rootPath.isDirectory()){
System.out.println("您输入的扫描的路径有误!!!");
return;
}
//2.再让用户输入一个要扫描的关键词
System.out.println("请输入要删除文件的关键词:");
String word = scanner.next();
咱们写代码的时候,要对于用户输入的内容进行合法性检查!!!
然后进行递归扫描
scanDir(rootPath,word);
开始写scanDir方法
private static void scanDir(File rootPath, String word) {
//1.先列出rootPath中所有的文件和目录
File[] files = rootPath.listFiles();
if(files==null ){
return;
}
/*这里用list和listFIles都行,listFIles返回File【】,list返回String数组,File对象更方便*/
//2.遍历每一个元素,针对不同类型作出不同处理
for (File f : files) {
//价格日志,方便当前递归的过程
System.out.println("当前扫描的文件"+f.getAbsolutePath());
if(f.isFile()){
//普通文件,检查文件是否要删除 并执行删除
checkDelete(f,word);
}else{
//目录,递归的再去判定子目录里的内容
scanDir(f,word);
}
}
}
最后实现checkDelete方法
private static void checkDelete(File f, String word) {
if(!f.getName().contains(word)){
//不必删除直接方法结束
return;
}
//需要删除
System.out.println("当前文件为:"+f.getAbsolutePath()+",请确认是否删除(Y/N):");
String choice = scanner.next();
if(choice.equals("Y")){
f.delete();
System.out.println("删除完毕");
}else{
f.delete();
System.out.println("取消删除");
}
}
这样这个练习就写好了
完整代码
package IO;
import java.io.File;
import java.util.Scanner;
public class Demo13 {
public static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
//1.先让用户输入要扫描的目录
System.out.println("请输入要扫描的路径:");
String path = scanner.next();
File rootPath = new File(path);
if(!rootPath.isDirectory()){
System.out.println("您输入的扫描的路径有误!!!");
return;
}
//2.再让用户输入一个要扫描的关键词
System.out.println("请输入要删除文件的关键词:");
String word = scanner.next();
//3.可以进行递归扫描了
//使用这个方法进行递归
scanDir(rootPath,word);
}
private static void scanDir(File rootPath, String word) {
//1.先列出rootPath中所有的文件和目录
File[] files = rootPath.listFiles();
if(files==null ){
return;
}
//2.遍历每一个元素,针对不同类型作出不同处理
for (File f : files) {
//价格日志,方便当前递归的过程
System.out.println("当前扫描的文件"+f.getAbsolutePath());
if(f.isFile()){
//普通文件,检查文件是否要删除 并执行删除
checkDelete(f,word);
}else{
//目录,递归的再去判定子目录里的内容
scanDir(f,word);
}
}
}
private static void checkDelete(File f, String word) {
if(!f.getName().contains(word)){
//不必删除直接方法结束
return;
}
//需要删除
System.out.println("当前文件为:"+f.getAbsolutePath()+",请确认是否删除(Y/N):");
String choice = scanner.next();
if(choice.equals("Y")){
f.delete();
System.out.println("删除完毕");
}else{
f.delete();
System.out.println("取消删除");
}
}
}

浙公网安备 33010602011771号