文件IO(代码案例: 文件复制, 指定目录查找文件, 指定目录查找内容)

news2024/9/17 20:51:29

文件复制

进行普通文件的复制
使用操作字节流的对象操作文件

// 文件复制
public class Main {
    public static void main(String[] args) throws IOException {
        // 输入两个路径, 源路径, 目的路径
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入拷贝文件的源路径:");
        String srcPath = scanner.next();
        System.out.println("请输入拷贝文件的目的路径:");
        String destPath = scanner.next();

        File src = new File(srcPath);
        if(!src.isFile()) {
            // 拷贝文件源路径错误
            System.out.println("源路径输入有误");
            return;
        }
        
        File dest = new File(destPath);
        if(dest.isFile()) {
            System.out.println("目的路径已存在拷贝文件");
            return;
        }

        try (InputStream inputStream = new FileInputStream(src);
             OutputStream outputStream = new FileOutputStream(dest)) {

            while(true) {
                int b = inputStream.read();
                if(b == -1) break;
                outputStream.write(b);
            }
        }
    }
}

运行结果
在这里插入图片描述

在这里插入图片描述


指定目录查找文件

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

// 指定目录查找文件, 并删除
public class Main {
    private static Scanner scanner = new Scanner(System.in);
    public static void main(String[] args) {
        // 让用户输入指定目录和文件名称
        System.out.println("请输入搜索目录: ");
        String basePath = scanner.next();
        File root = new File(basePath);
        if(!root.isDirectory()) {
            System.out.println("搜索目录不存在");
            return;
        }

        System.out.println("请输入删除文件名称: ");
        String nameToDelete = scanner.next();

        scanDir(root, nameToDelete);
    }

    private static void scanDir(File root, String nameToDelete) {
        // 获取当前目录下的所有目录和文件
        File[] files = root.listFiles();
        if(files == null) return;

        for(File f : files) {
            if(f.isDirectory()) {
                // 如果是目录, 则递归搜索
                scanDir(f, nameToDelete);
            } else {
                // 如果是文件, 则判定是否是要删除的文件
                if(f.getName().contains(nameToDelete)) {
                    System.out.println("确认是否删除文件: " + f.getAbsolutePath());
                    String ok = scanner.next();
                    if(ok.equals("y") || ok.equals("Y")) {
                        f.delete();
                        System.out.println("删除成功");
                    }else{
                        System.out.println("删除失败");
                    }
                }
            }
        }
    }
}

运行结果
在这里插入图片描述


指定目录查找内容

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

package IO_review;

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

// 指定目录查找内容
public class Main {
    private static List<File> result = new ArrayList<>();
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 输入搜索目录
        System.out.println("请输入搜索目录: ");
        String rootPath = scanner.next();
        File rootDir = new File(rootPath);
        if(!rootDir.isDirectory()) {
            System.out.println("搜索目录输入有误");
            return;
        }

        // 输入搜索内容/文件名
        System.out.println("请输入指定内容: ");
        String token = scanner.next();

        // dfs搜索
        scanDir(rootDir, token);

        // 输出查询到的结果
        if(result == null) System.out.println("无查询结果");
        for (File f : result) {
            System.out.println(f.getAbsolutePath());
        }
    }
    
    // 搜索目录
    private static void scanDir(File rootDir, String token) {
        File[] files = rootDir.listFiles();
        if(files == null) return;

        // 遍历当前目录
        for(File f : files) {
            if(f.isDirectory()) {
                // 如果还是目录, 则递归查询目录
                scanDir(f, token);
            } else {
                // 如果是文件, 则查询文件名称及内容
                if(f.getName().contains(token)) {
                    result.add(f);
                    continue;
                }

                scanFile(f, token);
            }
        }
    }

    // 搜索文件
    private static void scanFile(File f, String token) {
        // try-with-resorces 语法
        try (InputStream inputStream = new FileInputStream(f);
             Scanner scanner = new Scanner(inputStream)) {
            String content = "";
            while(scanner.hasNext()) {
                // 获取当前文件的所有内容
                content += scanner.nextLine();
            }
            // 判定内容中是否包含指定内容
            if(content.contains(token)) {
                result.add(f);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

鸿蒙Harmony应用开发—ArkTS-高级组件:@ohos.arkui.advanced.Chip(操作块组件)

操作块&#xff0c;用于搜索框历史记录或者邮件发送列表等场景。 说明&#xff1a; 该组件从API Version 11开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 Chip Chip({options:ChipOptions}) 装饰器类型&#xff1a;Builde…

springboot网站开发-诡异的static/images读取故障

springboot网站开发-诡异的static/images读取故障!我在本地环境测试代码&#xff0c;一切正常。可以读取到该路径下的图片模板&#xff0c;正常生成图片存储在本地D盘下面的文件夹。但是改成服务器linux环境后就不行了。打包发布后&#xff0c;死活读取不到图片模板。 这个故障…

JavaScript高级(十三)---ES6中Set,map

ES6 Set 在ES6之前&#xff0c;我们存储数据的结构主要有两种&#xff1a;数组、对象。 在ES6中新增了另外两种数据结构&#xff1a;Set、Map&#xff0c;以及它们的另外形式WeakSet、WeakMap。 Set是一个新增的数据结构&#xff0c;可以用来保存数据&#xff0c;类似于数组&a…

python家政服务系统flask-django-php-nodejs

相比于以前的传统手工管理方式&#xff0c;智能化的管理方式可以大幅降低家政公司的运营人员成本&#xff0c;实现了家政服务的标准化、制度化、程序化的管理&#xff0c;有效地防止了家政服务的随意管理&#xff0c;提高了信息的处理速度和精确度&#xff0c;能够及时、准确地…

TDP1000泰克TDP1000差分探头

181/2461/8938产品概述&#xff1a; 高速串行标准中使用的差分信令要求非常精确的检测。泰克差分探头能够提供业界领先的带宽和信号保真度&#xff0c;可确保您能洞察每一个细节。我们的 TriMode™ 架构 使您可以从一个DUT连接点上完成差分、单端和共模测量&#xff0c;进而简…

C语言经典算法-5

文章目录 其他经典例题跳转链接26.约瑟夫问题&#xff08;Josephus Problem&#xff09;27.排列组合28.格雷码&#xff08;Gray Code&#xff09;29.产生可能的集合30.m元素集合的n个元素子集 其他经典例题跳转链接 C语言经典算法-1 1.汉若塔 2. 费式数列 3. 巴斯卡三角形 4. …

JMeter如何监控服务器资源?

jmeter是一个基于Java的开源性能测试工具&#xff0c;它可以用来测试静态和动态的资源&#xff0c;例如Web应用、数据库、FTP服务器等。如果要在进行压力测试的同时&#xff0c;监控服务器的CPU、内存、磁盘、网络等资源的使用情况&#xff0c;需要使用一些插件或工具来实现。 …

【STL基础】vector、stack、queue、list、pair、map、unordered_map、set、unordered_set(详细讲解)

vector、list、pair、unordered_map、unordered_set、stack、queue 参考文章&#xff1a; &#xff08;1&#xff09;【apollo】泛型编程 与 STL &#xff08;2&#xff09;c stack用法 入门必看 超详细 &#xff08;3&#xff09;C中queue的用法&#xff08;超详细&#xff0c…

使用 SCL 给 Centos7.6 升级 GCC 版本

使用 SCL 给 Centos7.6 升级 GCC 版本 什么是 SCL背景安装 SCL安装工具集启用环境devtoolset 与 gcc 版本对应参考文献 什么是 SCL SCL 软件集是为了给 RHEL / CentOS 用户提供一种方便、安全的安装和使用应用程序和运行时环境的多个&#xff08;而且可能是更新的&#xff09;…

最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载

最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载 梨花带雨播放器基于thinkphp6开发的XPlayerHTML5网页播放器前台控制面板,支持多音乐平台音乐解析。二开内容:修复播放器接口问题,把接口本地化,但是集成外链播放器接口就不本地化了,我花钱找人写的理解下…

Flutter 3.13 之后如何监听 App 生命周期事件

在 Flutter 中&#xff0c;您可以监听多个生命周期事件来处理应用程序的不同状态&#xff0c;但今天我们将讨论 didChangeAppLifecycleState 事件。每当应用程序的生命周期状态发生变化时&#xff0c;就会触发此事件。可能的状态有 resumed 、 inactive 、 paused 、 detached …

应急响应靶机训练-Web3题解

前言 接上文&#xff0c;应急响应靶机训练-Web3。 前来挑战&#xff01;应急响应靶机训练-Web3 题解 首先登录用户administrator 寻找隐藏用户 找到隐藏用户hack6618$ 然后去找apache的日志文件 分析得出两个IP地址 192.168.75.129 192.168.75.130 然后更换hack6618$的…

【前端】卡片渐变色阴影效果 旋转动画

【前端】卡片渐变色阴影效果 旋转动画 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Breathing…

【2】华为交换机如何修改Web登录密码?

0x01 问题描述 如果忘记了Web登录密码或者希望修改Web登录密码&#xff0c;用户可以通过Console口、STelnet或Tenet等方式登录交换机后设置新的Web登录密码。 使用Telnet协议存在安全风险&#xff0c;建议使用Console囗或STelnet V2登录设备 0x02 问题解决 <HUAWEI> s…

HarmonyOS入门-环境及项目搭建

近来在学习HarmonyOS&#xff0c;虽然跟着入门项目敲了部分代码&#xff0c;但感觉还是有点云里雾里的&#xff0c;并且官方文档和视频课程只能说是一言难尽&#xff0c;所以打算通过写文章的方式记录下。 学习代码最好的方式是通过项目&#xff0c;官方提供的Demo还是挺不错的…

JAVA多线程之JMM

文章目录 1. Java内存模型2. 内存交互3. 三大特性3.1 可见性3.1.1 可见性问题3.1.2 原因3.1.3 解决方法 3.2 原子性3.3 有序性 4. 指令重排5. JMM 与 happens-before5.1 happens-before关系定义5.2 happens-before 关系 在继续学习JUC之前&#xff0c;我们现在这里介绍一下Java…

MySQL表的增删改查---多表查询和联合查询

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

眼科新视界:争议中的激光矫正手术

《眼科新视界&#xff1a;争议中的激光矫正手术》 一、眼科激光矫正手术&#xff1a;科技之光还是潜在风险&#xff1f; 1、激光矫正手术作为近年来眼科领域的热门技术&#xff0c;以其快速、安全、有效的特点吸引了众多近视、远视、散光等视力问题患者的关注。通过激光能量&…

怎么理解面向对象?一文带你全面理解

文章目录 1、类和对象&#xff08;1&#xff09;面向过程和面向对象初步认识&#xff08;2&#xff09;类的引入&#xff08;3&#xff09;类的定义&#xff08;4&#xff09;类的访问限定符及封装4.1 访问限定符4.2 封装 &#xff08;5&#xff09;类的作用域&#xff08;6&am…

虹科Pico汽车示波器 | 免拆诊断案例 | 2019 款东风悦达起亚K2车怠速起停系统工作异常

一、故障现象 一辆2019款东风悦达起亚K2车&#xff0c;搭载G4FG发动机&#xff0c;累计行驶里程约为9 400 km。车主反映&#xff0c;行驶至路口停车等红灯时&#xff0c;怠速起停&#xff08;ISG&#xff09;系统自动使发动机熄火&#xff0c;接着组合仪表提示“怠速起停已解除…