当前位置: 首页 > news >正文

文件IO 2

补充一些用到前面没提到的方法

isDirectory()方法,检查一个对象是否是文件夹,是true不是false

isFile()方法,检测一个对象是否为文件,是true不是false

文件的读写操作实践

上一篇大致讲了文件读写操作的基本操作,下面是实践时间

查找文件并删除

public class Demo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入查找的目录:");
        String rootDir = scanner.next();
        File rootFile = new File(rootDir);
        if(!rootFile.isDirectory()){
            System.out.println("不是目录");
        }
        System.out.println("请输入要删除的关键字:");
        String keyword = scanner.next();

    scanDir(rootFile,keyword);
    }
//遍历目录
    private static void scanDir(File rootFile, String keyword) {
        File[] files = rootFile.listFiles();//列出当前目录列表
        if(files == null){
            return;//目录为空
        }
        for (File file:files){//对比,判断是文件还是目录
            System.out.println("遍历目录文件"+ file.getAbsolutePath());
            if (file.isFile()){
                dealFile(file,keyword);//是文件,判断文件名是否包含删除的关键字
            }else{
                scanDir(file,keyword);//目录,则继续递归
            }
        }
    }

    private static void dealFile(File file, String keyword) {
        if(file.getName().contains(keyword)){
            //contains会比对传入file与keyword是否有对部分
            System.out.println("发现文件:"+ file.getAbsolutePath());//绝对路径
            System.out.println("是否删除:y/n");
            Scanner x = new Scanner(System.in);
            String y = x.next();
            if (y.equalsIgnoreCase("y")){
                file.delete();
                System.out.println("删除成功");

            }else{
                System.out.println("没有删除");
            }

        }
    }
}

将文件并且复制到其他目录

public class Demo13 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入源文件路径:");
        String srcPath = scanner.next();
        System.out.println("请输入目标文件路径:");
        String destPath = scanner.next();
        File srcfile = new File(srcPath);
        if(!srcfile.isFile()){//判断是否为文件
            System.out.println("不是源文件或不存在");
        }
        File destFil = new File(destPath);
        if(!destFil.getParentFile().isDirectory()){//判断目标文件目录存不存在
            System.out.println("目标文件目录不存在");
            return;
        }
        //开始复制文件
        try(InputStream inputStream = new FileInputStream(srcfile) ;
            OutputStream outputStream = new FileOutputStream(destFil)){
            //前面讲要关闭文件我却没有用,这里解释一下是因为try()方法自带了关闭文件功能
            while(true){
                byte[] buf = new byte[1024];
                int n = inputStream.read(buf);
                if(n == -1){
                    break;
                }
                outputStream.write(buf, 0 ,n);
            }
            System.out.println("复制成功");
        } catch (IOException e) {
          throw new RuntimeException();
        }
    }
}

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

 

public class Demo14 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要搜索的路径");
        String rootPath = scanner.next();
        File rootfile = new File(rootPath);
        if (!rootfile.isDirectory()){
            System.out.println("不是路径");
            return;
        }
        System.out.println("输入搜索关键字");
        String keyword = scanner.next();

        scanDir(rootfile,keyword);//扫描
    }

    private static void scanDir(File rootfile, String keyword) {
        File[] files = rootfile.listFiles();//获取当前目录下所有的内容
        if (files ==null){
            return;
        }
        for (File file :  files){
            if(file.isFile()){//文件
                deaFile(file,keyword);
            }else {//目录
                scanDir(file,keyword);//递归
            }
        }
    }

    private static void deaFile(File file, String keyword) {
        if (file.getName().contains(keyword)){
            System.out.println("文件名包含关键字" + file.getAbsolutePath());
            return;
        }
        StringBuilder stringBuilder = new StringBuilder();
        try(Reader reader = new FileReader(file)) {//keyword是字符串,使用字符流
            while(true){
                char[] chars = new char[1024];
                int n = reader.read(chars);
                if (n ==-1){
                    break;
                }
            stringBuilder.append(chars,0,n);
            }
        }catch(IOException e){
            throw new RuntimeException(e);
        }
        if(stringBuilder.indexOf(keyword)>= 0){//找到匹配项
            System.out.println("文件内容包含关键字" + file.getAbsolutePath());
            return;
        }
    }

相关文章:

  • 计算机科学技术研究者文献数据库推荐
  • 树莓派5 外设GPIO使能 PWM
  • DaVinci Resolve19.1下载:达芬奇调色中文版+安装步骤
  • 服务器ubuntu22.04上安装tiny-cuda-nn
  • STM32 + keil5 跑马灯
  • 深入理解 Apache Dagster:数据管道编排实战指南
  • 系统调用与中断
  • 鸿蒙学习手册(HarmonyOSNext_API16)_应用开发UI设计:Swiper
  • Swoole 的 Hyperf 框架和 Go 的 Gin 框架高并发原理以及技术实现对比分析
  • [C++面试] 智能指针面试点(重点)续4
  • 动手学深度学习:AlexNet
  • 从基础到实践(二十三):MCU选型设计指南
  • 避坑,c#开发人员学习开发app时.NET MAUI和Vue3 选择
  • 青少年编程与数学 02-013 初中数学知识点 04课题、图形与几何
  • 洛谷题单2-P1424 小鱼的航程(改进版)-python-流程图重构
  • [NCTF2019]Fake XML cookbook [XXE注入]
  • 第八部分:进程创建退出等待和替换
  • 深入探究C语言中的二进制世界:从原理到实践
  • 国产数据库突围,要过“生态关”
  • java多并发问题与解决办法以及为什么不能在多线程环境中使用非线程安全的集合?
  • 陈吉宁龚正黄莉新胡文容等在警示教育基地参观学习,出席深入贯彻中央八项规定精神学习教育交流会
  • 七旬男子驾“老头乐”酒驾被查,曾有两次酒驾两次肇事记录
  • 王毅谈中拉论坛第四届部长级会议重要共识
  • 上海首发经济“卷”到会展业,浦东签约三个年度“首展”
  • 马上评丨岂能为流量拿自己的生命开玩笑
  • 沙县小吃中东首店在沙特首都利雅得开业,首天营业额5万元