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

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

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;
    }
}


相关文章
|
1月前
|
Linux 数据处理 C语言
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(下)
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(下)
37 0
|
2月前
|
缓存 NoSQL Redis
redis管道操作(节省网络IO开销)
pipeline中发送的每个command都会被server立即执行,如果执行失败,将会在此后的响应中得到信息;也就是pipeline并不是表达“所有command都一起成功”的语义,管道中前面命令失败,后面命令不会有影响,继续执行。
31 1
|
1月前
|
Linux C语言 C++
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(上)
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(上)
28 0
|
2月前
|
C++
Open3D File Io 文件IO
Open3D File Io 文件IO
|
2月前
|
存储 缓存 Unix
【嵌入式软件工程师面经】Linux文件IO
【嵌入式软件工程师面经】Linux文件IO
34 1
|
2月前
|
存储 安全 Unix
【.Net Core】深入理解IO之文件和目录
【.Net Core】深入理解IO之文件和目录
37 4
|
2月前
|
Java
io读两个文件,生成list 排重后写本地文件(Java)
io读两个文件,生成list 排重后写本地文件(Java)
24 2
|
2月前
|
Linux 网络安全 开发工具
【linux】基础IO |文件操作符
【linux】基础IO |文件操作符
25 0
|
2月前
使用字节输入流报错 java.io.FileNotFoundException: srcdruid.properties (系统找不到指定的文件。)
使用字节输入流报错 java.io.FileNotFoundException: srcdruid.properties (系统找不到指定的文件。)
23 0
|
2月前
|
Java
文件操作与IO(3) 文件内容的读写——数据流
文件操作与IO(3) 文件内容的读写——数据流
22 0