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)

相关推荐
千楼4 分钟前
阿里巴巴Java开发手册(1.3.0)
java·代码规范
reiraoy18 分钟前
缓存解决方案
java
安之若素^33 分钟前
启用不安全的HTTP方法
java·开发语言
ruanjiananquan9939 分钟前
c,c++语言的栈内存、堆内存及任意读写内存
java·c语言·c++
zskj_zhyl1 小时前
智慧养老丨从依赖式养老到自主式养老:如何重构晚年生活新范式
大数据·人工智能·物联网
chuanauc1 小时前
Kubernets K8s 学习
java·学习·kubernetes
一头生产的驴1 小时前
java整合itext pdf实现自定义PDF文件格式导出
java·spring boot·pdf·itextpdf
哲科软件1 小时前
从“电话催维修“到“手机看进度“——售后服务系统开发如何重构客户体验
大数据·智能手机·重构
YuTaoShao1 小时前
【LeetCode 热题 100】73. 矩阵置零——(解法二)空间复杂度 O(1)
java·算法·leetcode·矩阵
zzywxc7872 小时前
AI 正在深度重构软件开发的底层逻辑和全生命周期,从技术演进、流程重构和未来趋势三个维度进行系统性分析
java·大数据·开发语言·人工智能·spring