基于IO流的三个小程序

在指定目录下查询文件名是否包含该关键字

思路

首先,需要判断先判断用户输入的目录是否村咋,不存在就直接返回并提示用户该目录不存在,如果存在就先下一步,看这个文件是否是目录,如果不是目录也直接返回,如果前两步都满足了,那就可以让用户输入查询的关键字,关键字不能为空,然后接着遍历目录下的每个文件,先创建一个文件数组,用来存在每个目录下的文件,如果是空的就直接返回,如果不是空的就使用foreach去取出里面的每个元素一一进行判断是文件还是目录,是目录就递归,文件就判断是否包含,发现包含就开始询问用户是否删除

具体解析

在这段代码中,首先就是先判断是否存在这个目录,然后就判断是否是目录,接着开始判断是否是字符注意不能为空,是字符就跳转dealfile中去处理

这里创建一个文件数组用来存在目录下的每个文件或目录,如果是空的就返回,如果不是空的就开始取出每一个分别去判断是文件还是目录,是目录就递归,是文件就判断是否包含,包含就跳转到scanfile

在这里就是真正的处理文件的地方了,判断这个文件的名字是否包含关键字,如果是的话就返回文件的绝对路径,然后询问用户是否删除,然后判断一下是否真的删除成功了就结束。

源码:

java 复制代码
package HomeWork;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: zhany
 * Date: 2025-12-12
 * Time: 19:05
 */
/*搜索指定的目录,找到所以包含指定字符的文件(不包含目录)*/
public class Search {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你要扫描的目录");
        String rootDirpath = scanner.next();

        File rootFile = new File(rootDirpath);
        if (!rootFile.isDirectory()) {
            System.out.println("目录错误或不存在");
            return;
        }

        System.out.println("请输入你要查找的字符");
        String key = scanner.next();
        sacnDir(rootFile,key);
    }

    private static void sacnDir(File rootFile, String key) {
        File[] files = rootFile.listFiles();
        if (files == null) {
            return;
        }
        for (File file: files) {
            if(file.isFile()){
                dealFile(file,key);
            } else {
                sacnDir(file,key);
            }
        }
    }

    private static void dealFile(File file, String key) {
        if (file.getName().contains(key)) {
            System.out.println("发现文件" + file.getAbsoluteFile() + "是否删除 y /n");
            Scanner scanner = new Scanner(System.in);
            String input = scanner.next();
            if (input.equalsIgnoreCase("y")) {
                file.delete();
                System.out.println("文件已删除!");
            }
        }
        }

}
 

复制一份文件

思路

首先需要判断用户传入的源文件是否存在,不存在或者不是文件都return,接着就要去判断用户选择的目标路径的父目录是否存在,因为父目录不存在的情况下是没办法进行操作的,接着就可以使用文件的io流开始读取和写入文件了

具体实现

首先,先判断源文件是否存在或为文件

然后判断文件要复制的路径的父目录是否存在

接着使用文件IO流写入即可

源码

java 复制代码
package HomeWork;

import java.io.*;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: zhany
 * Date: 2025-12-13
 * Time: 10:14
 */
public class CopyReward {
    public static void main(String[] args) {
        System.out.println("请输入源文件的路径");
        Scanner scanner = new Scanner(System.in);
        String srcPath = scanner.nextLine();
        File srcfile = new File(srcPath);
        if (!srcfile.exists()) {
            System.out.println("该路径不存在");
            return;
        }
        if (!srcfile.isFile()) {
            System.out.println("不是文件");
            return;
        }
        System.out.println("请输入目标路径");
        String destPath = scanner.nextLine();
        File destfile = new File(destPath);
        if (!destfile.getParentFile().exists()) {
            System.out.println("不存在该目录");
            return;
        }
        try(InputStream inputStream = new FileInputStream(srcfile);
            OutputStream outputStream = new FileOutputStream(destfile)) {
            byte[] bytes = new byte[1024];
            while (true){
                int n = inputStream.read(bytes);
                if (n == -1) {
                    break;
                }
                outputStream.write(bytes,0,n);
            }
            System.out.println("创建成功");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
 

查询指定目录下是否包含关键字,内容包含也算

思路

这个第三个和第一个的思路大差不差,区别就在于最后的时候要去读取文件内容是否包含关键字,其他的逻辑和第一个都是类似的

具体实现

首先先检查用户输入的路径存在与否和有无问题,有就退出程序

其次开始检查关键字,在用户传入的目录中,先创建一个文件数组用来存储目录中的目录和文件,是文件就跳转到srcfile,不是就递归

最后这个也很简单,如果文件名包含就不用检查内容了,如果文件名不包含那么就去检查内容,内容使用read去读取,然后拼接到字符串中,最后使用indexof去判断是否包含这个关键字,包含就会返回>=0

源码

java 复制代码
package HomeWork;

import java.io.*;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: zhany
 * Date: 2025-12-13
 * Time: 10:35
 */
public class ContentReaward {
    public static void main(String[] args) {
        System.out.println("请输入你要查询的路径");
        Scanner scanner = new Scanner(System.in);
        String srcPath = scanner.nextLine();
        File rootFile = new File(srcPath);
        if (!rootFile.exists()) {
            System.out.println("该目录不存在");
            return;
        }
        if (!rootFile.isDirectory()) {
            System.out.println("该目录有误");
            return;
        }
        System.out.println("请输入查询的关键字");
        String keyword = scanner.nextLine();
        dealFile(rootFile,keyword);
    }

    private static void dealFile(File rootFile, String keyword) {
        File[] files = rootFile.listFiles();
        if (files == null) {
            return;
        }
        for (File file :files){
            if (file.isFile()) {
                srcFile(file,keyword);
            } else {
                dealFile(file,keyword);
            }
        }
    }

    private static void srcFile(File file, String keyword) {
        if (file.getName().contains(keyword)) {
            System.out.println("文件名包含关键字"+keyword+file.getAbsoluteFile());
        } else {
            StringBuilder stringBuilder = new StringBuilder();
            try(Reader reader = new FileReader(file);) {
                char[] chars = new char[1024];
                while (true){
                    int n = reader.read(chars);
                    if (n == -1) {
                        break;
                    }
                    stringBuilder.append(chars,0,n);

                }
                if (stringBuilder.indexOf(keyword) >= 0) {
                    System.out.println("文件的内容包含" +file.getAbsoluteFile());
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
 
相关推荐
Scott9999HH3 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔3 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社4 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海4 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖5 小时前
JDK 26 新特性详解
java·开发语言
马优晨6 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区8 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大8 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai8 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
维天说9 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json