基于文本IO实现的小程序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、查找指定的文件
  • 二、进行普通文件的复制
  • 三.查找指定文件或者内容包含指定字符文件


前言

基于上一篇学过Io操作的基础应用


提示:以下是本篇文章正文内容,下面案例可供参考

一、查找指定的文件

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

思路:

1.先让用户输入:要扫描的路径+你要查找的词

2.遍历目录,找到名字匹配的文件

3.询问用户是否删除

程序:

package io_0929;

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

public class demo6 {
    public static void main(String[] args) throws IOException {
//        1.让用户输入必要的信息
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入要扫描的路径: ");
        File rootDir=new File(scanner.next());
        if(!rootDir.isDirectory()){
            System.out.println("你输入的目录不存在!");
        }
        System.out.println("请输入要搜索的关键词: ");
        String toDelete=scanner.next();
        //2.遍历目录,需要借助一个核心方法,listFile()
        scanDir(rootDir,toDelete);
    }
    //借助这个方法进行递归遍历
    private static void scanDir(File rootDir,String toDelete) throws IOException {
        System.out.println("当前访问: "+rootDir.getCanonicalPath());
        File[]files=rootDir.listFiles();
        //说明rootDir是一个空的目录
        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){
        if(f.getName().contains(toDelete)){
            System.out.println("该单词 "+toDelete);
            Scanner scanner=new Scanner(System.in);
            String choice=scanner.next();
            if(choice.equals("Y")||choice.equals("y")){
                f.delete();
            }
        }
    }
}

 

listFiles():

能够把当前目录里的文件和子目录列举出来,但是这个方法,只能列出一层,没法直接列出子目录中的子目录

二、进行普通文件的复制

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

(使用字节流来进行操作,字节流也是可以用来拷贝文本文件)

  Scanner scanner = new Scanner(System.in);
        System.out.println("请输入源文件: ");
        //srcFile 形如d:/cat.flg
        File srcFile = new File(scanner.next());
        System.out.println("请输入目标文件");
        //destFile 形如 d:/cat2.jpg
        if (!srcFile.isFile()) {
            System.out.println("输入的源文件有误");
            return;
        }
        File destFile = new File(scanner.next());
        if (!destFile.getParentFile().isDirectory()) {
            System.out.println("输入的目标文件有误!");
            return;
        }
        //2.打开源文件,按照字节读区内容,一次写入到目标文件中
        try (InputStream inputStream = new FileInputStream(srcFile);
             OutputStream outputStream = new FileOutputStream(destFile)) {
            //读src的每个字节,写入到dest中
            while (true) {
                int ret = inputStream.read();
                if (ret == -1) {
                    break;
                }
                outputStream.write(ret);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

三.查找指定文件或者内容包含指定字符文件

第一个代码的进阶版,第一个代码是判定文件名是否包含关键词,现在还要判断内容是否包含

  public static void main(String[] args) throws IOException {
        //1.输入路径和要查询的关键词
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入要扫描的路径 ");
        File rootDir=new File("请输入要查询的词: ");
        String toFind=scanner.next();
        //2.递归扫描的目录
        scanDir(rootDir,toFind);
    }
    private static void scanDir(File rootDir,String toFind) throws IOException{
        File[]files=rootDir.listFiles();
        if(files==null){
            return;
        }
        for(File f:files){
            if(f.isDirectory()){
                scanDir(f,toFind);
            }else{
                checkFile(f,toFind);
            }
        }
    }
    private static void checkFile(File f,String toFind) throws IOException{
        //1.先检查文件名
        if(f.getName().contains(toFind)){
            System.out.println(f.getCanonicalPath()+" 文件名中包含 "+ toFind);
        }
        //2.再检查文件内容
        try(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);
            }
        }
    }

注意:stringbuilder.indexof()返回指定字符串第一次出现的下标,如果没有出现返回-1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值