文件IO操作的一些练习小案例

目录

1.扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件

2.文件的复制

3. 文件查找(也查找文件内容)


1.扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件

package CSDN;

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

/**
 * @Author GoodManS
 * @Description 扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件
 */
public class Demo6 {
    public static void main(String[] args) {
        System.out.println("请输入你要扫描的目录:");
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        File file1 = new File(str);
        while (!file1.isDirectory()) {
            System.out.println("不存在该扫描目录,请重新输入:");
            str = scanner.nextLine();
            file1 = new File(str);
        }

        System.out.println("请输入你想要查询内容的关键字:");
        String key = scanner.nextLine();
        List<File> ret = new LinkedList<>();
        scanDir(file1, key, ret);
        for (File i : ret) {
            System.out.println(i.getAbsoluteFile());
        }
    }

    public static void scanDir(File rootDir, String key, List<File> ret) {
        File[] files = rootDir.listFiles();//这个方法返回的是 这个路径下所有文件和目录
        if (files == null || files.length == 0) {
            return;
        }
        for (File file : files) {
            if (file.isDirectory()) {
                scanDir(file, key, ret);
            } else {
                if (file.getName().contains(key)) {
                    ret.add(file.getAbsoluteFile());
                }
            }
        }
    }
}

2.文件的复制

package CSDN;

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

/**
 * @Author GoodManS
 * @Description 进行普通文件的复制
 */
public class Demo8 {
    public static void main(String[] args) throws IOException {
        System.out.println("请输入你要复制的文件:");
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        File f1 = new File(str);
        if (!f1.isFile()) {
            System.out.println("文件路径输入错误!或者文件不是普通文件!请重新输入:");
            str = scanner.nextLine();
            f1 = new File(str);
        }
        copyFile(f1);
    }

    public static File copyFile(File file1) throws IOException {
        File ret = new File("C:/Users/19396/Desktop/cs.txt");
        try (InputStream is = new FileInputStream(file1)) {
            try (OutputStream os = new FileOutputStream(ret)){
                byte[] bytes = new byte[1024];
                int len;
                do {
                    len = is.read(bytes);
                } while (len != -1);
                os.write(bytes);
                os.flush();
            }
        }
        return ret;
    }
}

3. 文件查找(也查找文件内容)

public class Demo {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        // 接收用户输入的路径
        System.out.println("请输入要扫描的路径:");
        String rootPath = scanner.next();
        // 校验路径合法性
        if (rootPath == null || rootPath.equals("")) {
            System.out.println("路径不能为空。");
            return;
        }
        // 根据输入的路径实例化文件对象
        File rootDir = new File(rootPath);
        if (rootDir.exists() == false) {
            System.out.println("指定的目录不存在,请检查。");
            return;
        }
        if (rootDir.isDirectory() == false) {
            System.out.println("指定的路径不是一个目录。请检查。");
            return;
        }
 
        // 接收要查找的关键字
        System.out.println("请输入要查找的关键字:");
        String token = scanner.next();
        if (token == null || token.equals("")) {
            System.out.println("查找的关键字不能为空,请检查。");
            return;
        }
 
        // 遍历目录查找符合条件的文件
        // 保存找到的文件
        List<File> fileList = new ArrayList<>();
        scanDir(rootDir, token, fileList);
 
        // 打印结果
        if (fileList.size() > 0) {
            System.out.println("共找到了 " + fileList.size() + "个文件:");
            for (File file: fileList) {
                System.out.println(file.getAbsoluteFile());
            }
        } else {
            System.out.println("没有找到相应的文件。");
        }
 
    }
 
    private static void scanDir(File rootDir, String token, List<File> fileList) throws IOException {
        // 获取目录下的所有文件
        File[] files = rootDir.listFiles();
        if (files == null || files.length == 0) {
            return;
        }
 
        // 遍历
        for (File file : files) {
            if (file.isDirectory()) {
                // 如果是文件就递归
                scanDir(file, token, fileList);
            } else {
                // 文件名是否包含
                if (file.getName().contains(token)) {
                    fileList.add(file);
                } else {
                    if (isContainContent(file, token)) {
                        fileList.add(file.getAbsoluteFile());
                    }
                }
 
            }
        }
    }
 
    private static boolean isContainContent(File file, String token) throws IOException {
        // 定义一个StringBuffer存储读取到的内容
        StringBuffer sb = new StringBuffer();
        // 输入流
        try (InputStream inputStream = new FileInputStream(file)) {
            try (Scanner scanner = new Scanner(inputStream, "UTF-8")) {
                // 读取每一行
                while (scanner.hasNext()) {
                    // 一次读一行
                    sb.append(scanner.nextLine());
                    // 加入一行的结束符
                    sb.append("\r\n");
                }
            }
        }
        return sb.indexOf(token) != -1;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shn!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值