基于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();
            }
        }
    }
}
 
相关推荐
王燕龙(大卫)6 小时前
rust:线程
开发语言·rust
Dev7z6 小时前
基于MATLAB的零件表面缺陷检测系统设计与实现
开发语言·人工智能·matlab
CoderYanger6 小时前
贪心算法:7.最长连续递增序列
java·算法·leetcode·贪心算法·1024程序员节
期待のcode6 小时前
MyBatis-Plus的Wrapper核心体系
java·数据库·spring boot·后端·mybatis
曼巴UE56 小时前
UE C++ 字符串的操作
java·开发语言·c++
天天进步20156 小时前
Linux 实战:如何像查看文件一样“实时监控” System V 共享内存?
开发语言·c++·算法
凛_Lin~~6 小时前
安卓/Java语言基础八股文
java·开发语言·安卓
老华带你飞6 小时前
出行旅游安排|基于springboot出行旅游安排系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring·旅游
八年。。6 小时前
Python 版本确认方法
开发语言·笔记·python