Java文件IO

White graces:个人主页

🙉专栏推荐:Java入门知识🙉

🙉 内容推荐:JUC常见类🙉

🐹今日诗词:东风吹柳日初长,雨馀芳草斜阳🐹


⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏

⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏


目录

什么是IO

什么是文件

文件的存储

文件的路径

绝对路径

相对路径

文件检索

文本文件和二进制文件

Java操作文件

File类

patSeparator

File的构造方法

常见函数方法

文件创建

基准目录

文件删除

创建一级目录

创建多级目录

文件重命名

读写文件,打开关闭文件

字节流读数据

read()方法无参版本

read(byte [] bytes)方法有参版本

read(bytep[] bytes, int off, int len)

关闭文件

文件描述符表

字节流写数据

字符流读数据

Unicode和Utf8编码

字符流写数据

字符流和字节流与Scanner的爱情火花

文件搜索功能

文件复制功能

文件内容搜索功能

美图分享


什么是IO

这个不是靠感觉来的, 有人为的规定

什么是文件

文件夹是不是文件?

是文件: 文件夹被称作目录文件, 也是文件的一种

文件的存储

文件存储背后的数据结构是一个多叉树

文件的路径

绝对路径

windows从此电脑出发, 此电脑到指定文件的路径称为绝对路径

相对路径

从某一文件出发, 某一文件到指定文件的路径被称为相对路径

文件检索

检索通过   ./   和 ../  两个基础操作检索

举例:

1. 在bin目录下查找qq.exe文件

2. 在bin目录的上一级目录(QQ目录)查找qq.exe

3. 在其他目录下查找qq.exe

文本文件和二进制文件

文本文件: 存储文本数据, 这些数据是合法的字符

二进制文件: 存啥都行(本质上是01都构成的)

如何区分文本文件和二进制文件

方法: 使用记事本打开, 乱码的是二进制文件, 不乱码的就是文本文件

Java操作文件

Java标准库内置了File类, 可以用来对文件进行操作

我们来看看File的属性和参数

File类

patSeparator

pathSeparator: 分割符 

File的构造方法

有三个构造方法

我们来看看第二个如何使用吧!

常见函数方法

文件创建

基准目录

基准目录: 通常是程序当前工作的目录

文件删除

还有一种删除方式

deleteOnExit() 这种删除方式是程序运行完毕后才会删除文件

创建一级目录

通过mkdir()方法创建出一级目录

多级目录就是目录里面套目录

创建多级目录

通过mkdirs()方法创建多级目录

文件重命名

 通过renameTo()方法进行文件重命名        

读写文件,打开关闭文件

Java中读文件写文件打开关闭文件和"流"这样的类相关

流(stream)分成字节流和字符流

字节流: 以字节为单位读写数据

字符流: 以字符为单位读写数据

字节流读文件: InputStream

字节流写文件: OutputStream

字符流写文件: Writer

字符流读文件: Reader

字节流和字符从文件中读数据方法相同: read()

字节流和字符从文件中写数据方法相同: write()

字节流读数据

InputStream类: 这个类可以打开一个文件

类里的方法可以对文件进行读取数据的操作

正确使用方法: 虽然他是一个抽象类需要实现read()方法, 但是这样很麻烦,而且耦合性很大,

因此标准库提供了它的子类, 已经帮我们实现好了, 这个子类就是FileInputStream

read()方法无参版本

read(byte [] bytes)方法有参版本

read(bytep[] bytes, int off, int len)

关闭文件

打开文件, 用完之后要关闭

关闭文件: close()

文件描述符表

文件描述符表: 记录文件的IO信息

每打开文件时就会消耗资源记录信息, 关闭问价就会释放资源

close()方法是一个非常重要的方法, 打开文件之后一定要记得关闭, 某些情况下即使写了close方法也不一定会执行到, 比如下面这种情况

文件没有及时关闭的影响: 大部分情况下没啥影响, 如果多次打开文件,不去关闭文件, 导致文件描述符表被占满, 占满之后执行打开文件操作就会失败,

解决办法

可以把close()方法放到finally中

这种写法不是很优雅, 有一种更好的写法

try with resource

注意: 并不是所有的类都能放到try( ) 里, 只有实现了Closeable接口的类才可以, 这种写法在{ }

的代码执行完毕后会自动调用close方法

字节流写数据

OutputStream类: 这个类可以打开文件, 并且类里的方法可以向文件写入数据

OutputStream类中的write方法可以让我们向文件里写入数据

字符流读数据

Reader类用于读取字符流数据, 并且会自动打开对应的文件

类里的read方法可以读取字符类型的数据

read方法有四种版本

Unicode和Utf8编码

字符流写数据

Writer类: 可以打开指定文件, 如果不存在就会创建一个, 之后可以使用Writer类里的方法向文件中写入数据

write方法有四个版本

字符流和字节流与Scanner的爱情火花

以前我们都是Scanner scanner = new Scanner(System.in)的方式去输入信息

现在学了字节流和字符流读写数据, 因此可以让他们配合使用

文件搜索功能

文件的基础操作我们已经了解了, 我们可以基于这些方法写一个文件搜索功能

明确需求:

1. 输入一个路径

2. 输入一个关键词

3. 在这个路径下查找文件, 这个文件名和关键词相同

文件复制功能

这个功能就比较简单了

要求: 输入两个路径复制路径和目的路径, 然后将复制路径文件的内容复制到目的路径文件中

解决步骤: 

1. 创建目的文件

2. 读取文件内容

3. 将内容复制到指定目录文件中

import java.util.*;
import java.io.*;
//复制文件操作
public class Solution {public static void main(String[] args) throws IOException {//输入两个文件路径, 复制路径和目标路径Scanner scanner = new Scanner(System.in);System.out.println("请输入要复制的文件路径: ");String src = scanner.next();System.out.println("请输入目的路径: ");String des = scanner.next();//判断路径是否合法File srcfile = new File(src);if (!srcfile.isFile()) {System.out.println("输入复制文件的路径不合法");return;}File desfile = new File(des);if(!desfile.getParentFile().isDirectory()) {//因为目的文件本事就不存在,所以判断它上一级目录文件存不存在System.out.println("输入的目的路径非法");return;}//1.创建文件//这里通过写的方式自动创建文件OutputStream outputStream = new FileOutputStream(desfile);//2.读取文件内容InputStream inputStream = new FileInputStream(srcfile);//3.写入文件内容int a = 0;while (a != -1) {byte[] bytes = new byte[1024];a = inputStream.read(bytes);outputStream.write(bytes);}}
}

测试一下

文件内容搜索功能

要交:

输入一个路径和关键词, 在这个路径下, 查找文件内容(不是文件名)包含关键词的文件

解题步骤

1. 判断路径是否非法

2. 遍历文件

3. 遍历文件内容

4. 返回文件路径

import java.util.*;
import java.io.*;
public class Solution {public static void main(String[] args) throws IOException {Scanner scanner = new Scanner(System.in);System.out.println("请输入要搜索的路径: ");String path = scanner.next();System.out.println("请输入文件内容的关键词: ");String str = scanner.next();//1.判断路径是否存在File pathfile = new File(path);if (!pathfile.exists()) {System.out.println("搜索路径非法!");return;}//2. 遍历路径下的所有文件SearchFile(pathfile, str);}public static void SearchFile(File pathfile, String str) throws IOException {if (pathfile == null) {return;}if (pathfile.isDirectory()) {File[] files = pathfile.listFiles();//如果是一个目录文件就继续递归for (File file : files) {SearchFile(file, str);}} else {//是普通文件, 就遍历文件内容Searchstr(pathfile, str);}}public static void Searchstr(File pathfile, String str) throws IOException{Reader reader = new FileReader(pathfile);int a = 0;StringBuilder tmp = new StringBuilder();while( a != -1) {a = reader.read();tmp.append((char) a);if (tmp.indexOf(str) >= 0) {System.out.println("找到了符合条件的文件: " + pathfile.getAbsolutePath());return;}}}
}

运行结果

美图分享

✨🎆谢谢你的阅读和耐心!祝愿你在编程的道路上取得更多的成功与喜悦!"🎆✨🎄

⭐️点赞收藏加关注,学习知识不迷路⭐️

🎉✔️💪🎉✔️💪🎉✔️💪🎉✔️💪🎉

👍😏⛳️点赞☀️收藏⭐️关注😏👍

👍😏⛳️点赞☀️收藏⭐️关注😏👍

👍😏⛳️点赞☀️收藏⭐️关注😏👍

🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️

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

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

相关文章

Three.js 研究:4、创建设备底部旋转的科技感圆环

1、实现效果 2、PNG转SVG 2.1、原始物料 使用网站工具https://convertio.co/zh/png-svg/进行PNG转SVG 3、导入SVG至Blender 4、制作旋转动画 4.1、给圆环着色 4.2、修改圆环中心位置 4.3、让圆环旋转起来 参考一下文章 Three.js 研究:1、如何让物体动起来 Thre…

“论SOA在企业集成架构设计中的应用”必过模板,突击2024软考高项论文

考题部分 企业应用集成(Enterprise Application Integration, EAI)是每个企业都必须要面对的实际问题。面向服务的企业应用集成是一种基于面向服务体系结构(Service-OrientedArchitecture,SOA)的新型企业应用集成技术,强调将企业和组织内部的资源和业务功…

VSCode界面Outline只显示类名和函数名,隐藏变量名

参考链接 https://blog.csdn.net/Zjhao666/article/details/120523879https://blog.csdn.net/Williamcsj/article/details/122401996 VSCode中界面左下角的Outline能够方便快速跳转到文件的某个类或函数,但默认同时显示变量,导致找某个函数时很不方便。…

mimkatz获取windows10明文密码

目录 mimkatz获取windows10明文密码原理 lsass.exe进程的作用 mimikatz的工作机制 Windows 10的特殊情况 实验 实验环境 实验工具 实验步骤 首先根据版本选择相应的mimikatz 使用管理员身份运行cmd 修改注册表 ​编辑 重启 重启电脑后打开mimikatz 在cmd切换到mi…

Seq2Seq模型:详述其发展历程、深远影响与结构深度剖析

Seq2Seq(Sequence-to-Sequence)模型是一种深度学习架构,专为处理从一个输入序列到一个输出序列的映射任务设计。这种模型最初应用于机器翻译任务,但因其灵活性和有效性,现已被广泛应用于自然语言处理(NLP&a…

医院该如何应对网络安全?

在线医生咨询受到很多人的关注,互联网医疗行业的未来发展空间巨大,但随着医院信息化建设高速发展 医院积累了大量的患者基本信息、化验结果、电子处方、生产数据和运营信息等数据 这些数据涉及公民隐私、医院运作和发展等多因素,医疗行业办…

【QEMU中文文档】1.关于QEMU

本文由 AI 翻译(ChatGPT-4)完成,并由作者进行人工校对。如有任何问题或建议,欢迎联系我。联系方式:jelin-shoutlook.com。 QEMU 是一款通用的开源机器仿真器和虚拟化器。 QEMU 可以通过几种不同的方式使用。最常见的用…

OrangePi AIpro--新手上路

目录 一、SSH登录二、安装VNC Sevice(经测试Xrdp远程桌面安装不上)2.1安装xface桌面2.2 配置vnc服务2.2.1 设置vnc server6-8位的密码2.2.2 创建vnc文件夹,写入xstartup文件2.2.3 给xstartup文件提高权限2.2.4 在安装产生的vnc文件夹创建xsta…

【Uniapp小程序】自定义导航栏uni-nav-bar滚动渐变色

效果图 新建activityScrollTop.js作为mixins export default {data() {return {navBgColor: "rgba(0,0,0,0)", // 初始背景颜色为完全透明navTextColor: "rgba(0,0,0,1)", // 初始文字颜色};},onPageScroll(e) {// 设置背景const newAlpha Math.min((e.s…

PPP认证两种:PAP和CHAP,两次握手和三次握手

CHAP(Challenge-Handshake Authentication Protocol,质询握手认证协议)的设计理念是增强网络认证过程的安全性。在CHAP的三次握手过程中,不直接传送用户的明文密码,以此来提高安全性,具体步骤如下&#xff…

springboot结合mybatis使用多数据源的方式

背景 最近有一个需求,有两个库需要做同步数据,一个Doris库,一个mysql库,两边的表结构一致,这里不能使用navicat等工具提供的数据传输之类的功能,只能使用代码做同步,springboot配置多数据…

如何设置手机的DNS

DNS 服务器 IP 地址 苹果 华为 小米 OPPO VIVO DNS 服务器 IP 地址 中国大陆部分地区会被运营商屏蔽网络导致无法访问,可修改手机DNS解决。 推荐 阿里的DNS (223.5.5.5)或 114 (114.114.114.114和114.114.115.115) 更多公开DNS参考: 苹果…

ESP32-C3模组上实现蓝牙BLE配网功能(1)

本文内容参考: 《ESP32-C3 物联网工程开发实战》 乐鑫科技 蓝牙的名字由来是怎样的?为什么不叫它“白牙”? 特此致谢! 一、蓝牙知识基础 1. 什么是蓝牙? (1)简介 蓝牙技术是一种无线数据和…

Camunda BPM架构

Camunda BPM既可以单独作为流程引擎服务存在,也能嵌入到其他java应用中。Camunda BPM的核心流程引擎是一个轻量级的模块,可以被Spring管理或者加入到自定义的编程模型中,并且支持线程模型。 1,流程引擎架构 流程引擎由多个组件构成,如下所示: API服务 API服务,允许ja…

蒙自源儿童餐新品上市,引领健康美味新潮流

随着夏日的热烈与儿童节的欢乐氛围到来,蒙自源品牌隆重推出儿童餐新品,以“快乐不分大小,谁还不是个宝宝”为主题,为广大消费者带来一场健康与美味的盛宴。新品上市活动将于5月25日举行,蒙自源将以其独特的产品魅力和创…

最新 HUAWEI DevEco Studio 调试技巧

最新 HUAWEI DevEco Studio 调试技巧 前言 在我们使用 HUAWEI DevEco Studio 编辑器开发鸿蒙应用时,免不了要对我们的应用程序进行代码调试。我们根据实际情况,一般会用到以下三种方式进行代码调试。 肉眼调试法注释排错调试法控制台输出法弹出提示法断…

STM32 入门教程(江科大教材)#笔记2

3-4按键控制LED /** LED.c**/ #include "stm32f10x.h" // Device headervoid LED_Init(void) {/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_I…

关系数据库:关系运算

文章目录 关系运算并(Union)差(Difference)交(Intersection)笛卡尔积(Extended Cartesian Product)投影(projection)选择(Selection)除…

让表单引擎插上AI的翅膀-记驰骋表单引擎加入AI升级

让表单引擎插上AI的翅膀 随着科技的飞速发展,人工智能(AI)已经逐渐渗透到我们工作和生活的每一个角落。在数字化办公领域,表单引擎作为数据处理和流程自动化的重要工具,也迎来了与AI技术深度融合的新机遇。让表单引擎…

Java对象的比较——equals方法,Comparable接口,Comparator接口

Java对象的比较——equals方法,Comparable接口,Comparator接口 1. equals方法2. Comparable接口3. Comparator接口 1. equals方法 在判断两个整数是否相同时,我们可以使用以下方式: System.out.println(1 2); System.out.printl…