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

【JavaEE】IO基础知识及代码演示

目录

一、File

1.1 观察get系列特点差异

1.2 创建文件

1.3.1 delete()删除文件

1.3.2 deleteOnExit()删除文件

1.4 mkdir 与 mkdirs的区别

1.5 文件重命名

二、文件内容的读写----数据流

1.1 InputStream

1.1.1 使用 read() 读取文件

1.2 OutputStream

1.3 代码演示

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

        1.3.2 进⾏普通⽂件的复制

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


一、File

        (1)属性

        (2)构造方法

在Windows操作平台上,通常使用第二种构造方法

        (3)方法

1.1 观察get系列特点差异
import java.io.File;
import java.io.IOException;
public class Demo4 {public static void main(String[] args) throws IOException {File file = new File("C:./test");System.out.println(file.getName());//文件名字System.out.println(file.getParent());//父目录文件路径System.out.println(file.getPath());//文件路径System.out.println(file.getAbsolutePath());//绝对路径System.out.println(file.getCanonicalPath());//修饰过的绝对路径}
}

        由于在 Java 中 “\” 有转义字符 的功能,所以我们输入路径的时候需要多加一个“\”。上面演示了五种方法。

1.2 创建文件
public class Demo5 {public static void main(String[] args) throws IOException {File file = new File("./test");boolean ok = file.isFile();System.out.println(ok);file.createNewFile();boolean ok1 = file.isFile();System.out.println(ok1);}
}

1.3.1 delete()删除文件
public class Demo5 {public static void main(String[] args) throws IOException {File file = new File("./test");file.createNewFile();boolean ok = file.isFile();System.out.println(ok);file.delete();boolean ok2 = file.isFile();System.out.println(ok2);}
}

可以见到,基础的操作并不难,我们可以通过file.createNewFile()来创建新文件,也可以通过file.delete()来删除文件。

1.3.2 deleteOnExit()删除文件
public class Demo5 {public static void main(String[] args) throws IOException {File file = new File("./test");file.createNewFile();boolean ok = file.isFile();System.out.println(ok);file.deleteOnExit();System.out.println("删除完成");System.out.println(file.exists());Scanner scanner = new Scanner(System.in);scanner.next();}
}

可以看到我们掉用户 scanner 函数阻塞进程,掉用 deleteOnExit() 之后,文件并没有立即删除,只有当我们结束进程的之后才能删除。

1.4 mkdir 与 mkdirs的区别

       

import java.io.File;
import java.io.IOException;
public class Demo6 {public static void main(String[] args) throws IOException {File dir = new File("some-parent\\some-dir"); // some-parent 和 soSystem.out.println(dir.isDirectory());System.out.println(dir.isFile());System.out.println(dir.mkdir());System.out.println(dir.isDirectory());System.out.println(dir.isFile());}}

import java.io.File;
import java.io.IOException;public class Demo7 {public static void main(String[] args) throws IOException {File dir = new File("some-parent\\some-dir"); // some-parent 和 soSystem.out.println(dir.isDirectory());System.out.println(dir.isFile());System.out.println(dir.mkdirs());System.out.println(dir.isDirectory());System.out.println(dir.isFile());System.out.println(dir.getAbsolutePath());}}

由此可见,mkdirs对比与mkdir来说,mkdirs可以创建中间不存在的目录。

1.5 文件重命名
import java.io.File;
import java.io.IOException;public class Demo8 {public static void main(String[] args) throws IOException {File file = new File("./some-parent");File dest = new File("./some-dir");System.out.println(file.getCanonicalPath());System.out.println(dest.exists());System.out.println(file.renameTo(dest));System.out.println(dest.getCanonicalPath());System.out.println(dest.exists());}
}

import java.io.File;
import java.io.IOException;public class Demo8 {public static void main(String[] args) throws IOException {File file = new File("./some-parent/some-dir");File dest = new File("./some-dir");System.out.println(file.getCanonicalPath());System.out.println(dest.exists());System.out.println(file.renameTo(dest));System.out.println(dest.getCanonicalPath());System.out.println(dest.exists());}
}

可以看到,文件重命名也可以浅显的理解为,文件路径移动

二、文件内容的读写----数据流

上述我们只学会了 操作文件 ,对于操作文件内容,我们则需要用到数据流相关知识。Reader读取出来的是char数组或者String ,InputStream读取出来的是byte数组。

1.1 InputStream

InputStream 只是⼀个抽象类,要使⽤还需要具体的实现类。关于 InputStream 的实现类有很多,对于文件的读写 ,我们只需要关心 FIleInputStream,FileInputStream()里可以是 文件路径 或者 文件,下面是两种输出方式的演示。

1.1.1 使用 read() 读取文件
public class Demo9 {public static void main(String[] args) {try(InputStream inputStream = new FileInputStream("./test.txt")){while(true){int n = inputStream.read();if(n == -1){break;}System.out.printf("%c",n);}}catch (IOException e){e.printStackTrace();}}
}
public class Demo10 {public static void main(String[] args) {try(InputStream inputStream = new FileInputStream("./test.txt")){byte[] bytes = new byte[21024];while (true){int n = inputStream.read(bytes);if(n == -1){break;}for (int i = 0; i <n ; i++) {System.out.printf("%c",bytes[i]);}}}catch(IOException e){e.printStackTrace();}}
}

将⽂件完全读完的两种⽅式。相⽐较⽽⾔,后⼀种的 IO 次数更少,性能更好

1.2 OutputStream

OutputStream 同样只是⼀个抽象类,要使⽤还需要具体的实现类。对于文件的读写,我们只需要关注FileOutputStream,下面是两种输入方式的演示。

public class Demo11 {public static void main(String[] args) {try(OutputStream os = new FileOutputStream("./output.txt",true)){os.write('h');os.write('e');os.write('l');os.write('l');os.write('o');os.flush();}catch(IOException e){e.printStackTrace();}}
}
public class Demo12 {public static void main(String[] args) {try(OutputStream os = new FileOutputStream("./output.txt")){byte[] buf = new byte[]{(byte) 'h',(byte) 'e',(byte) 'l',(byte) 'l',(byte) 'o'};os.write(buf);os.flush();}catch(IOException e){e.printStackTrace();}}
}
1.3 代码演示
        1.3.1 扫描指定⽬录,并找到名称中包含指定字符的所有普通⽂件(不包含⽬录),并且后续询问⽤⼾是否 要删除该⽂件
mport java.io.File;
import java.util.Scanner;public class Demo14 {public static void main(String[] args) {System.out.println("请输入想扫描的文件");System.out.println("->");Scanner scanner = new Scanner(System.in);String rootPath = scanner.next();File file = new File(rootPath);System.out.println("请输入想删除的文件名字");;System.out.println("->");String key = scanner.next();scan(file,key);}private static void scan(File file, String key) {if(!file.isDirectory()){System.out.println("输入的路径有误!");return;}File[] files = file.listFiles();for (File f : files){if(f.isFile()){if(f.getName().contains(key)){doDelete(f,key);}}else {scan(f,key);}}}private static void doDelete(File f,String k) {System.out.println(f.getAbsolutePath()+"是否删除  Y/N");Scanner scanner = new Scanner(System.in);String key = scanner.next();if(key.equals("Y")||key.equals("y")){f.delete();}}
}
        1.3.2 进⾏普通⽂件的复制
import java.io.*;
import java.util.Scanner;public class Demo13 {public static void main(String[] args) throws IOException {System.out.println("请输入想复制的路径");System.out.print("->");Scanner scanner = new Scanner(System.in);String rootPath = scanner.next();System.out.println("请输入复制后的路径");System.out.print("->");String scrPath = scanner.next();try(InputStream inputStream = new FileInputStream(rootPath);OutputStream outputStream = new FileOutputStream(scrPath)){byte[] buf = new byte[1024];while(true){int n = inputStream.read(buf);if(n == -1){break;}outputStream.write(buf);}}catch (IOException e) {e.printStackTrace();}}
}

        1.3.3 扫描指定⽬录,并找到名称或者内容中包含指定字符的所有普通⽂件(不包含⽬录)
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Scanner;public class Demo3 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入想查询的路径");System.out.print("->");String rootPath = scanner.next();File rootFile = new File(rootPath);if(!rootFile.isDirectory()){System.out.println("输入的文件路径有误!");return;}System.out.println("请输入想查询的 关键字");System.out.print("->");String key = scanner.next();scan(rootFile,key);}private static void scan(File rootFile, String key) {if(!rootFile.isDirectory()){return;}File[] files = rootFile.listFiles();if(files == null|| files.length == 0){return;}for (File f : files){if(f.isFile()){doSearch(f,key);}else {scan(f,key);}}}private static void doSearch(File f, String key) {StringBuilder sb = new StringBuilder();try(Reader reader = new FileReader(f)){char[] chars = new char[1024];while(true){int n = reader.read(chars);if(n == -1){break;}String s = new String(chars,0,n);sb.append(s);}}catch(IOException e){e.printStackTrace();}if(sb.indexOf(key) == -1){return;}System.out.println("找到目标文件" + f.getAbsolutePath());}
}

=========================================================================

最后如果感觉对你有帮助的话,不如给博主来个三连,博主会继续加油的ヾ(◍°∇°◍)ノ゙

相关文章:

【JavaEE】IO基础知识及代码演示

目录 一、File 1.1 观察get系列特点差异 1.2 创建文件 1.3.1 delete()删除文件 1.3.2 deleteOnExit()删除文件 1.4 mkdir 与 mkdirs的区别 1.5 文件重命名 二、文件内容的读写----数据流 1.1 InputStream 1.1.1 使用 read() 读取文件 1.2 OutputStream 1.3 代码演示…...

安卓13系统导航方式分析以及安卓13修改默认方式为手势导航 android13修改导航方式

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.彩蛋1.前言 系统导航方式默认一般是按键的,如果要改成手势的话,我们来看看用户怎么修改的: 设置=>系统=>手势=>系统导航,在这里进行修改。我们来分析下这个流程,并且将其修改为…...

[技术杂谈]暗影精灵8plus电竞版台式机安装和使用注意

最近买回二手台式机准备做深度学习训练模型使用。由于个人不是十分有钱&#xff0c;因此下血本入手一台&#xff0c;不然深度学习玩不转。配置&#xff1a;i9-12900K / 64G d4 3733频率 / 1TSSD2TB机械 / RTX3090 24G显卡 旗舰版 机箱45L超大机箱。买回来后整体不错&#…...

【加密算法基础——AES解密实践】

AES 解密实践 AES 解密是对使用 AES 加密算法加密的数据进行恢复的过程。 常用的解密方式有三种&#xff1a; 在线解密工具&#xff1a;格式比较好控制&#xff0c;但是有些在线工具兼容性不好&#xff0c;有时候无法解出&#xff0c;不知道是自己的密文密钥没找对&#xff0…...

Spring01

spring框架 spring是轻量级的容器框架 spring framework 1、Spring核心学习内容 IOC、AOp, jdbcTemplate,声明式事务 2、IOC:控制反转&#xff0c;孚以管理部8号对象 3.AOP:切面编程4.JDBCTemplate:是spring提供一套访问数据库的技术,应用性强&#xff0c;相对好理解5.声明式…...

gogps 利用广播星历解算卫星位置matlab函数satellite_orbits详细注解版

主要注释了广播星历计算GPS BDS卫星位置的。 function [satp, satv] satellite_orbits(t, Eph, sat, sbas)% SYNTAX: % [satp, satv] satellite_orbits(t, Eph, sat, sbas); % % INPUT: % t clock-corrected GPS time % Eph ephemeris matrix % sat satellite…...

Oracle按照某一字段值排序并显示,相同的显示序号

Oracle按照某一字段值排序并显示,相同的显示序号 最近的工作遇到对于相同的字段,按照序号去显示值,并对相同的值进行排序 实验了半天,感觉满意的答案,分享给大家 第一种: ROW_NUMBER 语法: ROW_NUMBER() OVER (ORDER BY your_column) AS sequence_number 说明: 根据your_column…...

【Java基础】String详解

文章目录 String一、String 概述1、基本特性2、不可变性3、String、StringBuilder、StringBuffer 二、字符串 创建与内存分配1、字面量 / 双引号2、new关键字3、StringBuilder.toString()4、intern() 方法5、小结 三、字符串 拼接1、常量常量2、变量 拼接3、final变量 拼接4、拼…...

cmd命令

常用命令 查看电脑名称&#xff1a; hostname 查看网卡信息&#xff1a; ipconfig 快速打开网络设置界面&#xff1a; control.exe netconnections 或 rundll32.exe shell32.dll,Control_RunDLL ncpa.cpld 打开防火墙设置&#xff1a; wf.msc 指定网卡设置IP地址&#…...

《中文Python穿云箭量化平台二次开发技术11》股票基本信息获取分析及应用示例【前十大股东占股比例提取及分析】

《中文Python穿云箭量化平台二次开发技术11》股票基本信息获取分析及应用示例【前十大股东占股比例提取及分析】 《中文Python穿云箭量化平台》是纯Python开发的量化平台&#xff0c;因此其中很多Python模块&#xff0c;我们可以自己设计新的量化工具&#xff0c;例如自己新的行…...

OSINT技术情报精选·2024年9月第1周

OSINT技术情报精选2024年9月第1周 2024.8.15版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 1、中国信通院&#xff1a;《大模型落地路线图研究报告(2024年)》 近年来&#xff0c;大模型技术能力不断创出新高&#xff0c;产业应用持续走…...

51单片机应用开发---二进制、十六进制与单片机寄存器之间的关系(跑马灯、流水灯实例)

实现目标 1、掌握二进制与十六进制之间的转换 2、掌握单片机寄存器与二进制、十六进制之间的转换 3、掌握单片机驱动跑马灯、流水灯的原理 一、二进制与十六进制之间的转换 1、二进制 二进制&#xff08;binary&#xff09;&#xff0c; 是在数学和数字电路中以2为基数的…...

信息安全工程师(6)网络信息安全现状与问题

一、网络信息安全现状 威胁日益多样化&#xff1a;网络攻击手段不断翻新&#xff0c;从传统的病毒、木马、蠕虫等恶意软件&#xff0c;到勒索软件、钓鱼攻击、DDoS攻击、供应链攻击等&#xff0c;威胁形式多种多样。这些攻击不仅针对个人用户&#xff0c;还广泛影响企业、政府等…...

亚数TrustAsia亮相第十四届智慧城市与智能经济博览会,入围“2024数据要素创新应用优秀成果”!

智博会 2024年9月6日至8日&#xff0c;由宁波市人民政府、浙江省经济和信息化厅、中国信息通信研究院、中国电子信息行业联合会、中国电信、中国移动、中国联通主办的2024世界数字经济大会暨第十四届智慧城市与智能经济博览会&#xff08;以下简称“智博会”&#xff09;在宁波…...

Linux基础开发环境(git的使用)

1.账号注册 git 只是一个工具&#xff0c;要想实现便捷的代码管理&#xff0c;就需要借助第三方平台进行操作&#xff0c;当然第三平台也是基于git 开发的 github 与 gitee 代码托管平台有很多&#xff0c;这里我们首选 Github &#xff0c;理由很简单&#xff0c;全球开发者…...

VS Code终端命令执行后老是出现 __vsc_prompt_cmd_original: command not found

VS Code终端命令执行后老是出现 __vsc_prompt_cmd_original: command not found。 如下图&#xff08;vscode终端中&#xff09;&#xff1a; 解决方案&#xff1a; 1、vim ~/.bashrc 2、在~/.bashrc里面加入命令&#xff1a;unset PROMPT_COMMAND 3、source ~/.bashrc...

春天(Spring Spring Boot)

基本概念 春天 Spring 是用于开发 Java 应用程序的开源框架&#xff0c;为解决企业应用开发的复杂性而创建。 Spring 的基本设计思想是利用 IOC&#xff08;依赖注入&#xff09;和 AOP &#xff08;面向切面&#xff09;解耦应用组件&#xff0c;降低应用程序各组件之间的耦…...

Oracle EBS AP预付款行分配行剩余预付金额数据修复

系统环境 RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.6 问题情况 AP预付款已验证和自动审批但是未过账已经AP付款但是又撤消付款并且未过账问题症状 AP预付款暂挂: AP预付款行金额(等于发票金额)与分配行金额不相等: 取消AP预付款提示如下:...

【鸿蒙】HarmonyOS NEXT星河入门到实战7-ArkTS语法进阶

目录 1、Class类 1.1 Class类 实例属性 1.2 Class类 构造函数 1.3 Class类 定义方法 1.4 静态属性 和 静态方法 1.5 继承 extends 和 super 关键字 1.6 instanceof 检测是否实例 1.7.修饰符(readonly、private、protected 、public) 1.7.1 readonly 1.7.2 Private …...

Java设计模式—面向对象设计原则(六) ----->合成复用原则(CRP) (完整详解,附有代码+案例)

文章目录 3.6 合成复用原则(CRP)3.6.1 概述3.6.2 案列 3.6 合成复用原则(CRP) 合成复用原则(CRP)&#xff1a;Composite Reuse Principle&#xff0c;CRP 又叫&#xff1a; 组合/聚合复用原则&#xff08;Composition/Aggregate Reuse Principle&#xff0c;CARP&#xff09;…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...