Java文件操作和IO的小案例

文章目录


案例1

要求:

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

代码实现:

java 复制代码
package shixun;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class demo1 {
    public static void main(String[] args) throws IOException {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入要扫描的路径");
        File roorDir = new File(scanner.next());
        if (!roorDir.isDirectory()){
            System.out.println("您输入的目录不存在");
            return;
        }
        System.out.println("请输入要搜索的关键词");
        String toDelete=scanner.next();

        scanDir(roorDir,toDelete);
    }

    private static void scanDir(File roorDir, String toDelete) throws IOException {
        System.out.println("当前访问:"+ roorDir.getCanonicalPath());
        File[] files = roorDir.listFiles();
        if (files == null){
            return;
        }
        //如果目录非空,则循环遍历每个元素
        for (File f : files) {
            if (f.isDirectory()){
                scanDir(f,toDelete);
            }else {
                // 不是目录,是普通文件,判定文件名是否符合要求,是否要进行删除
                checkDelete(f,toDelete);
            }
        }
    }

    private static void checkDelete(File f, String toDelete) throws IOException {
        if (f.getName().contains(toDelete)){
            System.out.println("该单词"+toDelete+"被"+f.getCanonicalPath()+"包含了,是否要删除?(Y/N)");
            Scanner scanner=new Scanner(System.in);
            String choice=scanner.next();
            if (choice.equals("Y") || choice.equals("y")){
                f.delete();
                System.out.println("删除成功");
            }
        }
    }
}


删除成功:

案例2

要求:

进行普通文件的复制

我们把第一个文件打开,把里面的内容逐个字节的读出来,写入到第二个文件中即可。

代码实现:

java 复制代码
package shixun;

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

public class demo2 {
    public static void main(String[] args) throws IOException {
        //实现文件复制
        //先输入复制哪个文件,以及把这个文件复制到哪里去
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入源文件:");
        File srcFile= new File(scanner.next());
        System.out.println("请输入目标文件");
        File destFile= new File(scanner.next());
        if (!srcFile.isFile()){
            System.out.println("输入的源文件有误!");
            return;
        }
        if (!destFile.getParentFile().isDirectory()){
            System.out.println("输入的目标文件有误");
            return;
        }
        InputStream inputStream = new FileInputStream(srcFile);
        OutputStream outputStream = new FileOutputStream(destFile);
        while (true){
            int ret= inputStream.read();
            if (ret==-1){
                break;
            }
            outputStream.write(ret);
        }

    }
}


案例3

要求:

扫描指定目录,并找到名称或者内容中包含指定字符的所有普通文件(不包含目录)

(注意:我们现在的方案性能较差,所以尽量不要在太复杂的目录下或者大文件下实验)

代码实现:

java 复制代码
package shixun;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

public class demo3 {
    public static void main(String[] args) throws IOException {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入要扫描的路径");
        File roorDir = new File(scanner.next());
        if (!roorDir.isDirectory()){
            System.out.println("您输入的目录不存在");
            return;
        }
        System.out.println("请输入要搜索的关键词");
        String toFind=scanner.next();

        scanDir(roorDir,toFind);
    }

    private static void scanDir(File roorDir, String toDelete) throws IOException {
        System.out.println("当前访问:"+ roorDir.getCanonicalPath());
        File[] files = roorDir.listFiles();
        if (files == null){
            return;
        }
        //如果目录非空,则循环遍历每个元素
        for (File f : files) {
            if (f.isDirectory()){
                scanDir(f,toDelete);
            }else {
                // 不是目录,是普通文件,判定文件名是否符合要求,是否要进行删除
                checkDelete(f,toDelete);
            }
        }
    }

    private static void checkDelete(File f, String toFind) throws IOException {
        //先检查文件名
        if(f.getName().contains(toFind)){
            System.out.println(f.getCanonicalPath()+"文件名中包含"+toFind);
        }
        //再检查文件内容
        InputStream inputStream = new FileInputStream(f);
        StringBuilder stringBuilder=new StringBuilder();
        Scanner scanner=new Scanner(inputStream);
        while(scanner.hasNextLine()){
            stringBuilder.append(scanner.nextLine()+"\n");
        }
        if (stringBuilder.indexOf(toFind) > -1){
            System.out.println(f.getCanonicalPath()+"文件内容包括" + toFind);
        }
    }
}


(data.txt的文件内容为data)

相关推荐
珹洺7 分钟前
C++算法竞赛篇:DevC++ 如何进行debug调试
java·c++·算法
SHUIPING_YANG14 分钟前
根据用户id自动切换表查询
java·服务器·数据库
倔强的石头10615 分钟前
大数据时代下的时序数据库选型指南:基于工业场景的IoTDB技术优势与适用性研究
大数据·时序数据库·iotdb
爱吃烤鸡翅的酸菜鱼27 分钟前
IDEA高效开发:Database Navigator插件安装与核心使用指南
java·开发语言·数据库·编辑器·intellij-idea·database
惊涛骇浪、32 分钟前
SpringMVC + Tomcat10
java·tomcat·springmvc
墨染点香1 小时前
LeetCode Hot100【6. Z 字形变换】
java·算法·leetcode
ldj20201 小时前
SpringBoot为什么使用new RuntimeException() 来获取调用栈?
java·spring boot·后端
超龄超能程序猿1 小时前
Spring 应用中 Swagger 2.0 迁移 OpenAPI 3.0 详解:配置、注解与实践
java·spring boot·后端·spring·spring cloud
风象南1 小时前
SpringBoot配置属性热更新的轻量级实现
java·spring boot·后端
洛阳泰山1 小时前
Spring Boot 整合 Nacos 实战教程:服务注册发现与配置中心详解
java·spring boot·后端·nacos