三个关于文件操作的实例

news2024/11/15 11:50:08

内容是:通过文件操作,完成一些小的需求。用来查询某文件或者某个文件里面的关键字

1.例子一

(1)需求:在一个指定的目录下,找到包含该关键字的所有文件

(2)要求输入:一个目录、一个关键词

(3)效果展示

(4)思路

        输入一个目录和关键字,然后我们就去递归搜索该目录,第一步:先列出该目录下的所有子目录。第二步:遍历所有子目录;如果该子目录是文件,则读取该文件,判断是否包含关键字;如果是目录,则递归下去。第三步:如果该目录为空,结束该轮递归。

(5)完整代码

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

public class demo1 {

    //在一个指定的目录下,找到包含一个关键词的文件
    public static void main(String[] args) throws IOException {
        //1.输入
        Scanner in = new Scanner(System.in);
            System.out.println("请输入一个文件目录:");
            String s1 = in.next();
            System.out.println("请输入要查询的关键词:");
            String s2 = in.next();
            //2.判断输入的路径是否正确
            File file = new File(s1);
            if(!file.isDirectory()) {
                System.out.println("输入的目录不正确");
                return;
            }
            //3.开始查询
            findFile(file,s2);

    }
    private static void findFile(File file, String s2) {
        //1.列出当前目录下的所有子目录
        File[] files = file.listFiles();
        //2.当前目录下为空,为递归出口
        if(files==null) {
            return;
        }
        for(File f : files) {
          if(f.isFile()) {//是普通文件
              String ss = f.getName();
              //ss.equals(s2) 这是找到文件名一样的文件
              if(ss.contains(s2)) {
                  System.out.println("找到包含'"+s2+"' 关键字的路径"+f.getAbsolutePath());//该文件包含关键字就打出出绝对路径

              }
          }else if(f.isDirectory()){//是目录,就递归下一层
              findFile(f,s2);
          }
        }
    }

}

2.例子二

(1)需求:把一个文件复制到指定路径下

(2)输入:一个被复制文件的绝对路径,和一个目的路径

(3)效果

其实,就是把一个文件路径,复制一份(换了一个路径和文件名字)

(4)思路

第一步:输入两个路径。第二步:检查两个路径是否合法。第三步:将文件内容逐步复制到目标文件下。

(5)思路

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

public class demo2 {
    public static void main(String[] args){
        //1.输入
        Scanner in = new Scanner(System.in);
        System.out.println("输入要复制的文件路径:");
        String s1 = in.next();
        System.out.println("请输入要复制到的目录下");//包括文件的名字:也就是一个文件的绝对路径
        String s2 = in.next();
        //2.检查
        File file1 = new File(s1);
        if(!file1.isFile()) {//检查要复制的文件是否存在
            System.out.println("文件不存在");
            return;
        }
        //检查目标目录的上一级目录是否存在,file2.getParentFile()返回一个File对象,就可以直接判断该路径是否合法
        File file2 = new File(s2);
        if(!file2.getParentFile().isDirectory()) {
            System.out.println("目标路径非法");
            return;
        }

        try(InputStream inputStream = new FileInputStream(s1);OutputStream outputStream = new FileOutputStream(s2)) {
            while (true) {
                byte[] bytes = new byte[1024];
                int n = inputStream.read(bytes);
                if(n==-1) break;
                outputStream.write(bytes,0,n);
            }

        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }
}

3.例子三

(1)需求:查询指定文件路径下的带有关键字的文件内容

(2)输入:一个目标文件,和一个关键词(文件内容)

(3)效果

注意:这种查询的效率是非常的慢的,所以要指定非常细致的目录才能展示出效果

(4)思想

第一步:输入一个路径和关键词。第二步:判断路径的合法性。第三步:递归查询该目录的子目录;如果是路径,则继续递归;如果是文件,则直接查询文件内容。

(5)完整代码

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



public class demo3 {

    public static void main(String[] args) {
        //1.输入
        Scanner in = new Scanner(System.in);
        System.out.println("输入要查询的文件路径:");
        String s1 = in.next();
        System.out.println("请输入要查询的文件内容关键字:");//包括文件的名字:也就是一个文件的绝对路径
        String s2 = in.next();
        //2.检查合法性
        File file1 = new File(s1);
        if(!file1.isDirectory()) {
            System.out.println("查询目录非法");
            return;
        }
        //3.递归查询
        findFile(file1,s2);
    }

    private static void findFile(File file1, String s2) {
        File[] files = file1.listFiles();
        if(files == null) {
            return;
        }
        for(File f : files) {
            if(f.isFile()) {
                find(f,s2);
            }else if(f.isDirectory()) {
                findFile(f,s2);
            }
        }
    }

    private static void find(File f, String s2) {
        try(InputStream inputStream = new FileInputStream(f)) {
            //StringBuilder s = new StringBuilder();//将文件的内容全部拼接在一个字符串上面
            String s = new String();
            while (true) {
                int n = inputStream.read();
                if(n==-1) break;
                s+=(char)n;
            }
            if(s.indexOf(s2)>=0) {
                System.out.println("找到了:"+f.getAbsolutePath());
            }
        }catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1643710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言中的goto语句

goto label; C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。 #include <stdio.h> int main(){goto first;printf("我是你好\n");first:printf("nihao\n");second:printf("This is 2\n");return 0; } 使用goto会…

mysql其它补充

exist和in的区别 exists 用于对外表记录做筛选。 exists 会遍历外表&#xff0c;将外查询表的每一行&#xff0c;代入内查询进行判断。 当 exists 里的条件语句能够返回记录行时&#xff0c;条件就为真&#xff0c;返回外表当前记录。反之如果 exists 里的条件语句不能返回记…

Day31:单元测试、项目监控、项目部署、项目总结、常见面试题

单元测试 保证独立性。 Assert&#xff1a;断言&#xff0c;一般用来比较是否相等&#xff0c;比如 Assert.assertEquals 在JUnit测试框架中&#xff0c;BeforeClass&#xff0c;Before&#xff0c;After和AfterClass是四个常用的注解&#xff0c;它们的作用如下&#xff1a; …

Python爬虫:XPath解析爬取豆瓣电影Top250示例

一、示例的函数说明&#xff1a; 函数processing()&#xff1a;用于处理字符串中的空白字符&#xff0c;并拼接字符串。 主函数程序入口&#xff1a;每页显示25部影片&#xff0c;实现循环&#xff0c;共10页。通过format方法替换切换的页码的url地址。然后调用实现爬虫程序的…

Golang日志管理:使用log/slog实现高级功能和性能优化

Golang日志管理&#xff1a;使用log/slog实现高级功能和性能优化 简介基础使用初始化和配置日志级别 高级技巧自定义日志格式器条件日志处理 实战案例场景一&#xff1a;API请求日志记录场景二&#xff1a;错误跟踪和用户通知 性能优化优化日志记录的性能异步日志处理选择合适的…

【项目学习01_2024.05.05_Day05】

学习笔记 4.3 接口开发4.3.1 树型表查询4.3.2 开发Mapper4.3.3 开发Service4.3.4 测试Service 4.4 接口测试4.4.1 接口层代码完善4.4.2 测试接口 4.3 接口开发 4.3.1 树型表查询 4.3.2 开发Mapper 在对应的Mapper里定义一个方法 在同名的xml文件里具体定义相应的sql语句 4…

上市公司代理成本数据集(2000-2022年)

01、数据介绍 上市公司的代理成本是指因代理问题所产生的损失&#xff0c;为了解决代理问题所发生的成本。这些成本包括监督成本、约束成本和剩余损失。由于信息的不对称&#xff0c;股东无法知道经理人是在为实现股东收益最大化而努力工作&#xff0c;还是只为满足平稳的投资…

线性数据结构-手写队列-哈希(散列)Hash

什么是hash散列&#xff1f; 哈希表的存在是为了解决能通过O(1)时间复杂度直接索引到指定元素。这是什么意思呢&#xff1f;通过我们使用数组存放元素&#xff0c;都是按照顺序存放的&#xff0c;当需要获取某个元素的时候&#xff0c;则需要对数组进行遍历&#xff0c;获取到指…

定子的检查和包扎及转子的检查

线圈接好后 用摇表测试 线圈和外壳之间的绝缘性&#xff01; 测试通过后进行焊接&#xff01;&#xff0c;焊接的工具在后面的文章中会介绍&#xff01; 焊接好后&#xff0c;包绝缘管。 焊接完成后 进行星型连接&#xff0c;或者三角形连接&#xff01; 白扎带进行绑扎&…

【Android】Android应用性能优化总结

AndroidApp应用性能优化总结 最近大半年的时间里&#xff0c;大部分投在了某国内新能源汽车的某款AndroidApp开发上。 由于该App是该款车上&#xff0c;常用重点应用。所以车厂对应用性能的要求比较高。 主要包括&#xff1a; 应用冷启动达到***ms。应用热(温)启动达到***ms应…

一测知“芯”!芯片测试如何确保电子设备的“心脏”健康?

文章目录 封装&#xff1a;芯片的“铠甲”与“桥梁”测试&#xff1a;芯片质量的“守门员”《芯片封测从入门到精通》亮点内容简介作者简介目录获取方式 在高科技飞速发展的今天&#xff0c;芯片作为电子设备的心脏&#xff0c;承载着计算、控制、存储等核心功能。然而&#xf…

二.数据结构

单链表 数组实现单链表: int head; //head存储这个单链表的头结点 int value[N];//value存储结点的值 int nextt[N];//nextt存储结点的next指针 int id; //id表示当前用到的点的位置 //初始化: void Init(){head-1,id0;//链表的头节点要指向-1,当前结点位置为0 } //在…

python数据分析——在数据分析中有关概率论的知识

参数和统计量 前言一、总体二、样本三、统计抽样四、随机抽样4.1. 抽签法4.2. 随机数法 五、分层抽样六、整群抽样七、系统抽样八、统计参数九、样本统计量十、样本均值和样本方差十一、描述样本集中位置的统计量11.1. 样本均值11.2. 样本中位数11.3. 样本众数 十二、描述样本分…

分层解耦(IOC-DI引入)

目录 一、为什么要解耦 二、示例分析 三、如何解除耦合&#xff1f; 四、控制反转和依赖注入-简述 一、为什么要解耦 内聚&#xff1a;软件中各个功能模块内部的功能联系耦合&#xff1a;衡量软件中各个层/模块之间的依赖、关联的程度软件设计原则&#xff1a;高内聚低耦合…

FilterListener详解

文章目录 MVC模式和三层架构MVC模式三层架构MVC和三层架构 JavaWeb的三大组件Filter概述快速入门过滤器API介绍过滤器开发步骤配置过滤器俩种方式修改idea的过滤器模板 使用细节生命周期拦截路径过滤器链 案例统一解决全站乱码问题登录权限校验验 ServletContextServletContext…

Java项目:基于SSM框架实现的高校专业信息管理系统设计与实现(ssm+B/S架构+源码+数据库+毕业论文+PPT+开题报告)

一、项目简介 本项目是一套基于SSM框架实现的高校专业信息管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、…

基于51单片机PWM控制直流电机—数码管显示

基于51单片机PWM控制直流电机 &#xff08;仿真&#xff0b;程序&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.L298驱动直流电机&#xff1b; 2.数码管显示转动方向和PWM占空比&#xff08;0-100%&#xff09;&#xff1b; 3.按键控制PWM占空比来加/…

Centos7网络处理name or service not known

1、编辑->虚拟网络编辑器 2、查看本机的ip 3、 /etc/sysconfig/network-scripts/ 查看文件夹下面的 ifcfg-eth33 后面的33可能不一样 vi /etc/resolv.conf 编辑文件添加以下DNS nameserver 114.114.114.114 4、设置本机的网络 5、ping www.baidu.com 先重启…

交叉导轨维护和保养的方法!

交叉导轨系统作为一种常见的机械传动装置&#xff0c;广泛应用于各种精密机械设备中。为了确保交叉导轨系统的正常运行和延长其使用寿命&#xff0c;定期维护和保养是至关重要的。 1、清洁&#xff1a;定期清理交叉导轨表面的灰尘、油污等杂质&#xff0c;保持其清洁。在清理过…

【C++】详解STL的容器之一:list

目录 简介 初识list 模型 list容器的优缺点 list的迭代器 常用接口介绍 获取迭代器 begin end empty size front back insert push_front pop_front push_back pop_back clear 源代码思路 节点设计 迭代器的设计 list的设计 begin() end() 空构造 ins…