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


相关文章
|
13天前
|
Java 测试技术 Maven
Maven clean 提示文件 java.io.IOException
在使用Maven进行项目打包时,遇到了`Failed to delete`错误,尝试手动删除目标文件也失败,提示`java.io.IOException`。经过分析,发现问题是由于`sys-info.log`文件被其他进程占用。解决方法是关闭IDEA和相关Java进程,清理隐藏的Java进程后重新尝试Maven clean操作。最终问题得以解决。总结:遇到此类问题时,可以通过任务管理器清理相关进程或重启电脑来解决。
|
2月前
|
搜索推荐 索引
【文件IO】实现:查找文件并删除、文件复制、递归遍历目录查找文件
【文件IO】实现:查找文件并删除、文件复制、递归遍历目录查找文件
35 2
|
2月前
|
编解码 Java 程序员
【文件IO】文件内容操作
【文件IO】文件内容操作
52 2
|
2月前
|
存储 Java API
【文件IO】文件系统操作
【文件IO】文件系统操作
43 1
|
3月前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
3月前
|
JSON 前端开发 JavaScript
socket.io即时通信前端配合Node案例
本文介绍了如何使用socket.io库在Node.js环境下实现一个简单的即时通信前端配合案例,包括了服务端和客户端的代码实现,以及如何通过socket.io进行事件的发送和监听来实现实时通信。
40 2
|
2月前
|
存储 Java 程序员
【Java】文件IO
【Java】文件IO
38 0
|
3月前
|
Linux C语言
C语言 文件IO (系统调用)
本文介绍了Linux系统调用中的文件I/O操作,包括文件描述符、`open`、`read`、`write`、`lseek`、`close`、`dup`、`dup2`等函数,以及如何获取文件属性信息(`stat`)、用户信息(`getpwuid`)和组信息(`getgrgid`)。此外还介绍了目录操作函数如`opendir`、`readdir`、`rewinddir`和`closedir`,并提供了相关示例代码。系统调用直接与内核交互,没有缓冲机制,效率相对较低,但实时性更高。
|
4月前
|
存储 监控 Linux
性能分析之从 IO 高定位到具体文件
【8月更文挑战第21天】性能分析之从 IO 高定位到具体文件
45 0
性能分析之从 IO 高定位到具体文件
|
4月前
IO流拷贝文件的几种方式
IO流拷贝文件的几种方式
36 1