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

文件复制

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

// 文件复制
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();
        }
    }
}

运行结果

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

主机游戏:怀旧浪潮与未来创新的交汇

《主机游戏&#xff1a;怀旧浪潮与未来创新的交汇》 一、主机游戏的怀旧魅力 1、经典的再现&#xff1a;随着时间的推移&#xff0c;主机游戏不仅成为一种娱乐方式&#xff0c;更成为一代人的集体回忆。经典的像素画风、复古的音乐和简单却深入人心的故事情节&#xff0c;使得…

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

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

Qt QGraphicsView移动、缩放

原链接 首先需要明白&#xff0c;view在整个视图框架中的角色是用于显示scene的&#xff0c;所以决定了如何展示scene&#xff0c;包括scale()函数&#xff0c;用于放大缩小所展示的scene&#xff1b;centerOn()函数&#xff0c;决定scene的中心在何方。所有的操作&#xff0c…

VS2019 C++ NetCDF配置

原链接1 原链接2 做个备份 1.下载对应的NetCDF-C和C库 官网下载 选择64位的NetCDF4安装版&#xff08;没有DAP的&#xff09; 现在官网已经没有NetCDF-C 4.7.3 版本了&#xff0c;网上别人提供了新的下载地址&#xff1a;NetCDF各个版本&#xff08;Index of /library/net…

vue iframe实现父页面实时调用子页面方法和内容

父页面标签添加鼠标按下事件 父页方法中建立iframe通信 实时调用子页面方法 实时更改子页面文本内容

贵州省二级分类土地利用数据(矢量)

贵州省&#xff0c;地处中国西南腹地&#xff0c;地貌属于中国西南部高原山地&#xff0c;境内地势西高东低&#xff0c;自中部向北、东、南三面倾斜&#xff0c;平均海拔在1100米左右。贵州高原山地居多&#xff0c;素有“八山一水一分田”之说。全省地貌可概括分为&#xff1…

基于SpringBoot的街道办管理系统

摘 要 随着世界经济信息化、全球化的到来和互联网的飞速发展&#xff0c;推动了各行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、动态的、交互友好的、高效的街道办管理系统。当前的信息管理存在工作…

Python+requests+unittest+excel搭建接口自动化测试框架(超详细)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、框架结构 工程目录【文末有配套视频和资料免费领取】 代码&#xff1a;基于python2编写 二…

006_【基础篇】springboot整合Mybatis

SpringBoot 整合 Mybatis 只需要两步&#xff1a; 案例&#xff1a; 创建数据库 在 IDEA 提供的插件的内置的数据库图形化界面(其他图形化界面软件也可以&#xff0c;都一样&#xff09; 中创建以下数据库&#xff1a; create database if not exists mybatis;use mybatis…

principles of network applications网络应用原理

Creating a network app write programs that: ▪ run on (different) end systems ▪ communicate over network ▪ e.g., web server software communicates with browser software application transport network data link physical application transport network data li…

LeetCode每日一题【206. 反转链表】

思路&#xff1a;双指针&#xff0c;一前一后&#xff0c;逐个把指向后面的指针指向前面。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), ne…

面试常问:为什么 Vite 速度比 Webpack 快

前言 最近作者在学习 webpack 相关的知识&#xff0c;之前一直对这个问题不是特别了解&#xff0c;甚至讲不出个123....&#xff0c;这个问题在面试中也是常见的&#xff0c;作者在学习的过程当中总结了以下几点&#xff0c;在这里分享给大家看一下&#xff0c;当然最重要的是…

安全、合规、提质增效,南方某电网公司如何通过代码审计保障能源数字化转型?

​南方某电网公司供电营业区覆盖十几个州市&#xff0c;是所在省域电网运营和交易的主体&#xff0c;也是承担对外供电和培育电力支柱产业的重要企业。近年来该电网公司在数字化转型方面深耕细作&#xff0c;紧跟工业互联网的时代浪潮&#xff0c;打造设备智慧运维数字化场景&a…

Elasticsearch:ES|QL 入门 - Python Notebook

数据丰富在本笔记本中&#xff0c;你将学习 Elasticsearch 查询语言 (ES|QL) 的基础知识。 你将使用官方 Elasticsearch Python 客户端。 你将学习如何&#xff1a; 运行 ES|QL 查询使用处理命令对表格进行排序查询数据链式处理命令计算值计算统计数据访问列创建直方图丰富数…

数据结构从入门到精通——冒泡排序

冒泡排序 前言一、冒泡排序的基本思想二、冒泡排序的特性总结三、冒泡排序的动画演示四、冒泡排序的具体代码test.c 前言 冒泡排序是一种简单的排序算法&#xff0c;通过重复遍历待排序数列&#xff0c;比较相邻元素的大小并交换位置&#xff0c;使得每一轮遍历后最大&#xf…

蓝桥杯 2023 省A 更小的数

主要思路&#xff1a; 输入一个长度为n的字符串&#xff0c;用二维数组dp[i][j]来记录子串[i, j]是否需要反转一次才能满足条件。使用动态规划自底向上地填充dp数组。根据问题的要求&#xff0c;需要考虑字符串的子串中字符的大小关系来判断是否需要反转。最后统计满足条件的子…

小红书,已破!支持无水印批量下载

在我们刷小红书时&#xff0c;经常会遇到自己喜欢的头像/壁纸/背景图图片或各大博主发布的视频教程&#xff0c;想保存下载使用和后续的查看&#xff0c;但保存下载后发现图片或视频右下角保留小红书的水印&#xff0c;很影响使用查看的体验。 所以本期文章最软库给大家分享一…

3D高斯泼溅的崛起

沉浸式媒体领域正在以前所未有的速度发展&#xff0c;其中 3D 高斯溅射成为一项关键突破。 这项技术在广泛的应用中看起来非常有前景&#xff0c;并且可能会彻底改变我们未来创建数字环境以及与数字环境交互的方式。 在本文中&#xff0c;我们将通过与摄影测量和 NeRF 等前辈进…

JAVA_会话

会话技术 1.会话: 一次会话包含多次请求和响应 2.功能: 在一次会话的范围内的多次请求&#xff0c;共享数据 3.方式: 3.1.客户端会话技术 Cookie(甜点) 1.概念: 客户端会话技术,将数据保存到客户端 2.快速入门: 1.创建Cookie对象,绑定数据new Cookie(String name,String v…

3000+人使用,这套人力资源数据分析工具还能这么用

中国科学院自动化研究所&#xff08;以下简称“自动化所”&#xff09;成立于1956年&#xff0c;是中国科学院率先布局成立的“人工智能创新研究院”的总体牵头单位&#xff0c;是中国最早开展智能科学与技术基础理论、关键技术和创新性应用研究的科研机构&#xff0c;也是中国…