【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电竞版台式机安装和使用注意
最近买回二手台式机准备做深度学习训练模型使用。由于个人不是十分有钱,因此下血本入手一台,不然深度学习玩不转。配置:i9-12900K / 64G d4 3733频率 / 1TSSD2TB机械 / RTX3090 24G显卡 旗舰版 机箱45L超大机箱。买回来后整体不错&#…...
【加密算法基础——AES解密实践】
AES 解密实践 AES 解密是对使用 AES 加密算法加密的数据进行恢复的过程。 常用的解密方式有三种: 在线解密工具:格式比较好控制,但是有些在线工具兼容性不好,有时候无法解出,不知道是自己的密文密钥没找对࿰…...

Spring01
spring框架 spring是轻量级的容器框架 spring framework 1、Spring核心学习内容 IOC、AOp, jdbcTemplate,声明式事务 2、IOC:控制反转,孚以管理部8号对象 3.AOP:切面编程4.JDBCTemplate:是spring提供一套访问数据库的技术,应用性强,相对好理解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命令
常用命令 查看电脑名称: hostname 查看网卡信息: ipconfig 快速打开网络设置界面: control.exe netconnections 或 rundll32.exe shell32.dll,Control_RunDLL ncpa.cpld 打开防火墙设置: wf.msc 指定网卡设置IP地址&#…...

《中文Python穿云箭量化平台二次开发技术11》股票基本信息获取分析及应用示例【前十大股东占股比例提取及分析】
《中文Python穿云箭量化平台二次开发技术11》股票基本信息获取分析及应用示例【前十大股东占股比例提取及分析】 《中文Python穿云箭量化平台》是纯Python开发的量化平台,因此其中很多Python模块,我们可以自己设计新的量化工具,例如自己新的行…...
OSINT技术情报精选·2024年9月第1周
OSINT技术情报精选2024年9月第1周 2024.8.15版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 1、中国信通院:《大模型落地路线图研究报告(2024年)》 近年来,大模型技术能力不断创出新高,产业应用持续走…...

51单片机应用开发---二进制、十六进制与单片机寄存器之间的关系(跑马灯、流水灯实例)
实现目标 1、掌握二进制与十六进制之间的转换 2、掌握单片机寄存器与二进制、十六进制之间的转换 3、掌握单片机驱动跑马灯、流水灯的原理 一、二进制与十六进制之间的转换 1、二进制 二进制(binary), 是在数学和数字电路中以2为基数的…...

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

亚数TrustAsia亮相第十四届智慧城市与智能经济博览会,入围“2024数据要素创新应用优秀成果”!
智博会 2024年9月6日至8日,由宁波市人民政府、浙江省经济和信息化厅、中国信息通信研究院、中国电子信息行业联合会、中国电信、中国移动、中国联通主办的2024世界数字经济大会暨第十四届智慧城市与智能经济博览会(以下简称“智博会”)在宁波…...

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

VS Code终端命令执行后老是出现 __vsc_prompt_cmd_original: command not found
VS Code终端命令执行后老是出现 __vsc_prompt_cmd_original: command not found。 如下图(vscode终端中): 解决方案: 1、vim ~/.bashrc 2、在~/.bashrc里面加入命令:unset PROMPT_COMMAND 3、source ~/.bashrc...
春天(Spring Spring Boot)
基本概念 春天 Spring 是用于开发 Java 应用程序的开源框架,为解决企业应用开发的复杂性而创建。 Spring 的基本设计思想是利用 IOC(依赖注入)和 AOP (面向切面)解耦应用组件,降低应用程序各组件之间的耦…...

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):Composite Reuse Principle,CRP 又叫: 组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)…...

感谢阿里云RDS产品及时的“光速服务”
❝ 开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共3000人左右…...

如何实现本地mqtt服务器和云端服务器同步?
有时候,一个物联网项目,A客户想要本地使用,B客户想要线上使用,C客户想要本地部署,当有网环境时能线上使用。这个时候就需要本地MQTT服务和线上MQTT服务能相互自动转发。 后来经我一翻研究,其实Activemq支持…...
12.vite,webpack构建工具
😺😺 😺1.vite 介绍和对比 🏷️ Vite 是什么? 👉 Vite 是一个 前端构建工具 开发服务器, 可以帮你: • 开发阶段:秒开项目,改代码能瞬间热更新(…...

webpack其余配置
webpack搭建本地服务器 首先是要安装一个webpack-dev-server npm install webpack-dev-server -D 安装后在package.json中添加: {"name": "babel_core_demo","version": "1.0.0","main": "index.js"…...
ffmpeg(五):裁剪与合并命令
裁剪(剪切) 精准裁剪(有转码,支持任意起止时间) # 从第 10 秒到第 30 秒,重新编码 ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:30 -c:v libx264 -c:a aac output.mp4快速裁剪(无转码&#x…...

Java 日期时间类全面解析
Java 日期时间类全面解析:从传统到现代的演进 一、发展历程概览 二、传统日期类(Java 8前) 1. java.util.Date - 日期表示类 Date now new Date(); // 当前日期时间 System.out.println(now); // Wed May 15 09:30:45 CST 2023// 特定时间…...
MyBatis中foreach集合用法详解
在 MyBatis 中,<foreach> 标签用于遍历集合(Collection、List、Array、Map),常用于构建动态 SQL 语句(如 IN 查询、批量插入等)。以下是详细用法和示例: 核心属性 属性描述collection必填…...

应用分享 | 精准生成和时序控制!AWG在确定性三量子比特纠缠光子源中的应用
在量子技术飞速发展的今天,实现高效稳定的量子态操控是推动量子计算、量子通信等领域迈向实用化的关键。任意波形发生器(AWG)作为精准信号控制的核心设备,在量子实验中发挥着不可或缺的作用。丹麦哥本哈根大学的研究团队基于单个量…...
人工智能赋能高中学科教学的应用与前景研究
一、引言 1.1 研究背景 在科技飞速发展的当下,人工智能(Artificial Intelligence,简称 AI)已成为全球瞩目的关键技术领域,深刻地改变着人们的生活、工作和学习方式。从智能家居设备到智能交通系统,从医疗…...

零基础在实践中学习网络安全-皮卡丘靶场(第十期-Over Permission 模块)
经过这么长时间的学习,我相信大家已经有了很大的信心,有可能会有看不起的意思,因为皮卡丘是基础靶场,但是俗话说"基础不牢,地动山摇",所以还请大家静下心来进行学习 来翻译一下是什么意思&#…...