Java文件流大家族(通俗易懂,学习推荐版,很详细)——操作文件本身和文件中的数据

1.File(操作文件本身)

1.定义

image-20231206180653780

目录

image-20231206183929227

2.常用方法

image-20231206181806206

image-20231206214434174

image-20231206182029380

image-20231206183832594

image-20231206184430632


3.路径引用符

可以用/或者\\分隔路径

image-20231206181001993

还可以用File.separator分隔路径,会根据不同系统使用啥分隔符。

image-20231206181104660


4.绝对路径、相对路径及桌面路径表示

桌面路径为:

image-20231206183221825

我电脑的用户名为X

image-20231206183230914

image-20231206181951426

5.示例代码(遍历文件夹)

1.创建文件对象

image-20231206181806206

示例:

image-20231206180909537

image-20231206181503808

f1.length():以字节为单位,仅仅是获取该文件夹/文件的大小,如果是文件夹 不是获取文件夹的大小及文件夹里面文件夹的大小之和。

image-20231206181707669

2.常用方法1:判断文件类型(文件、文件夹),获取文件信息等

image-20231206182029380

示例:

image-20231206182202524

image-20231206215044266

image-20231206182256042

image-20231206182346136

如果该文件对象是绝对路径的话,则getAbsolutePath就是绝对路径,若是相对路径则会补全为绝对路径(路径都是带后缀的)

image-20231206182434233

3.常用方法2:创建和删除文件、文件夹

image-20231206183832594

示例:

image-20231206183803260

4.常用方法3:遍历文件夹

image-20231206184430632

示例:

list()列表的名称及包括文件夹名称也包括文件名称(如图中的授课新得.txt)

image-20231206184137871

listFiles()方法能获取当前文件对象路径的一级文件对象,注意是一级文件对象

image-20231206184408806

listFiles()使用注意事项

image-20231206185235358

示例:

1.当主调是文件,返回null

image-20231206185342772

无需ab.txt存不存在,只要是获取文件的一级目录对象都返回null。

路径不存在的一级目录文件对象返回null

image-20231206185501136

2.当主调是空文件夹是,返回一个长度为0的数组,数组内容为[]。图中aaa是空文件夹

image-20231206185119284

3.当主调是一个有内容的文件夹时,将里面所有的一级文件及文件夹的路径放在File数组中返回(即正常情况)

image-20231206184408806

4.这里只演示第一点

image-20231206190054808

image-20231206190310161

test是桌面上的一个文件夹。现在现在这个文件夹和文件进行隐藏。

可以看到隐藏结果获取到了

image-20231206190451789

6.重命名文件、文件夹(renameTo(文件对象)

案例:改变某个文件夹下的视频序号,要求从19开始

image-20231206191104223

image-20231206190938422

image-20231206215917155

直接输出文件对象,会直接输出该文件对象对应的路径

7.文件搜索(递归实现)

image-20231206191659718

image-20231206191958743

image-20231206191947188

再找到像要的文件(对象)后如果要打开或执行,可以用以下代码实现

 Runtime runtime = Runtime.getRuntime();
 runtime.exec(文件对象.getAbsolutePath());

8.删除非空文件夹(删除文件和删除空文件用相应的方法,可以直接调用)

此密码文件夹假如非空,也就是里面有文件或文件夹

image-20231206192815876

image-20231206192802045

2.IO流(操作文件的数据)

注意:流使用完之后必须用.close()方法关闭

1.概述

image-20231206180729243

image-20231207123441202

2.分类

image-20231207123600843

image-20231207123710407

3.文件流体系结构(基础原始流)

image-20231207123832181

1.FileInputStream(字节输入流)

常用于拷贝文件,文件传输等操作。

image-20231207124135599

1.每次读一个字节(性能差)

1.单个读取文件内容(每次读一个字节,性能能差,而且因为每次读一个字节读汉字会乱码)

image-20231207124325351

2.循环读取文件内容(每次读一个字节,性能能差,而且因为每次读一个字节读汉字会乱码

image-20231207124651500

下面进行改善

2.每次读多个字节(推荐)

自定义字节数组byte [] buffer = new byte[每次读取的字节大小]

image-20231207125449453

bug

image-20231207125945336

最终优化后的代码:

性能得到了明显提升,但是还是不能避免读取汉字时会乱码,如下图每次截取3个字节,可能会把汉字中的字节截断

image-20231207130239779

常用于拷贝文件,文件传输等操作。

3.一次读取完全部字节(可以解决读取的内容中文乱码问题)——不适合一次性读取大文件

image-20231207130706353

image-20231207131454802

方式1

image-20231207131520767

用完记得用close()方法关闭流

方式2(代码简洁,若读取的文件太大,会抛异常)

image-20231207131730655

image-20231207131845310

总结

image-20231207131940949

2.FileOutputStream(字节输出流)

image-20231207132138643

image-20231207132158771

close()方法关闭流。

示例代码:

1.写单个字节

image-20231207132348406

image-20231207132431199

image-20231207132521977

2.写多个字节(要写回车直接写"\r\n".getBytes())

image-20231207132641461

按需写多个字节

image-20231207133615529

上面的文件写操作都是重新覆盖,要追加文件写的内容,需在下一个参数中填true

image-20231207133701067

要写换行符直接用"\r\n"

image-20231207133901426

文件拷贝案例(字节输入流和字节输出流实现)

image-20231207134228090

image-20231207134718523

实现代码

image-20231207134608594

释放资源

1.try-catch-finally(代码比较复杂,但也可以使用)

image-20231207140333168

2.try-witch-resource(代码简洁)

try-catch执行完成后,会自动执行资源的close()方法

image-20231207141017056

图1-1

image-20231207140912239

格式:

try(

资源

)

资源就是该类实现AutoCloseable接口或者它的父类实现了AutoCloseable也算该子类实现了哦,在代码执行后会自动执行重写的close()方法,如上图1-1。

3.FileReader(字符输入流)

image-20231207142329714

示例代码:

1.每次读单个字符(性能差)

image-20231207142500356

2.每次读多个字符(推荐)

image-20231207142650530

4.FileWtiter(字符输出流)

image-20231207142806167

new FileWriter(File/String, true)中的true表示追加文件内容,默认不填写的话是覆盖文件内容操作。

.write("\r\n");表示写入换行。

示例代码

image-20231207143110167

注意事项

image-20231207143935263

注意:字符流写内容的时候,会先把内容存入内存的一块区域暂时保存,当你调用flush或close方法时,才会真正写入到文件中去。若该内容区域满了,还没刷新或关闭的话,会先把这块区域的内容先写入到文件中去,以便存其他写入内容。

所以它的效率比字节输出流的效率高,因为字节输出流每次写文件内容会调用系统资源往文件里面写内容,而字符输出流可以自己控制写入次数

image-20231207143329583

flush()方法刷新流,使得写入数据生效。刷新后还可以使用该流,也可以多次刷新

image-20231207143634044

close()关闭流,使得写入数据生效。关闭流后,不能在使得该流,否则报错“Stream closed ”

image-20231207143725675

4.缓冲流(提高读写数据的性能)

image-20231207144753118

对原始流进行加工

image-20231207145037974

image-20231207145057183

1.字节缓冲输入、输出流(BufferedInputStream、BufferedOutputStream)

代码不变,多了二行包装代码

image-20231207145251746

可定义缓冲池大小,默认8KB

image-20231207145537576

2.字符缓冲输入、输出流(BufferedReader、BufferedWriter)

1.字符缓冲输入流(BufferedReader)

image-20231207150105677

注意:readLine()是该BufferedReader的独有方法,若用多态写法的话,就不能调用该独有功能了。

示例代码:

image-20231207150406851

独有的readLine()方法,不能用多态写法

image-20231207150521589

readLine()读到结尾会返回null,所以可以配合循环来实现读内容

image-20231207150613184

2.字符缓冲输出流(BufferedWriter)

image-20231207150757320

newLine()是该类的独有方法用于写入换行,要调用该方法不能用多态写法,只能该类变量接收。

5.字符转换流(解决不同编码读取时乱码问题)

注意:该字符转换流是针对原始字节流,因为只有字节流才会出现乱码问题,而不针对字符流(字符流不存在乱码问题)。

该字符转换流可以理解为原始字节输入、输出流的字符流。该流还是低级流,可以用缓存流进行包装

image-20231207152033199

image-20231207151659973

1.字符输入转换流

image-20231207152902100

示例代码:

image-20231207152644846

2.字符输出转换流

image-20231207153210014

image-20231207153005568

示例代码:

image-20231207154012322

6.打印流(往文件里写啥内容就是啥内容,不进行任何转换)——底层自动包装缓存流,高效

如write(97)表示写的是a,而使用打印流write(97)表示可以写的就是这个原始内容97,不进行任何转换。

print(内容)方法表示写入的内容不默认添加换行。而且是该类的独有方法,必须子类变量接收赋值才能使用,多态写法则不能使用该独有方法。

image-20231207154138852

1.PrintStream(字节打印流)

image-20231207154620239

print(内容)方法表示写入的内容不默认添加换行。而且是该类的独有方法,必须子类变量接收赋值才能使用,多态写法则不能使用该独有方法。


示例代码:

  1. 97不进行转换成a,就是原始内容97

    image-20231207155234602

打印后的文件内容为

image-20231207155244498

2.指定写入内容的编码

image-20231207155351055

3.write()会对数字转为ACII码

image-20231207155623112

底层包装了缓存流性能高效。

image-20231207155803955


2.PrintWriter(字符打印流)

image-20231207160240711

print(内容)方法表示写入的内容不默认添加换行。而且是该类的独有方法,必须子类变量接收赋值才能使用,多态写法则不能使用该独有方法。

示例代码:

用法和PrintStream一样

image-20231207160353899

3.追加文件内容的写法

image-20231207160653222

正确方式:

格式为new PrintWriter(文件对象)或PrintStream(文件对象) ,文件对象内部必须设置追加模式,如new FileOutputStream("C:\\a.txt", true)

错误方法:

new PrintWriter(文件对象或字符串路径, true)为错误写法。

4.输出重定向

image-20231207161458599

示例代码:重定向输出到文件

image-20231207161420903

日志文件就是输出重定向到日志文件中记录

7.数据流(常用于数据通信,比较方便)

image-20231207161743823

1.DataOutputStream(数据字节输出流)

image-20231207162110802

要使用独有方法,就不要用多态写法了。

示例代码:

image-20231207162328661

该文件内容还包含了数据类型,以一种特殊形式存储的,不是用来看的

image-20231207162340451

2.DataInputputStream(数据字节输入流)

image-20231207162547950

示例代码:

image-20231207162730685

8.序列化流(及transient关键字)

image-20231207163000933

序列化与反序列化

image-20231207162934648

1.ObjectOutputStrean(序列化流)

image-20231207163741610

类要使用序列化,必须实现Serializable接口。

示例代码:

image-20231207163641625

image-20231207163508608

文件内容

image-20231207163525907

2.ObjectInputStrean(反序列化流)

image-20231207164530594

示例代码:

image-20231207164000620

3.transient关键字

示例理解

image-20231207164401132

image-20231207164454926

3.IO框架

1.定义及方法

image-20231207171222994

image-20231207171242303

2.使用步骤

1.去官方Commons-io官网下载压缩包

image-20231207170533505

2.解压后复制该jar包到项目中去

image-20231207170612447

3.在项目中新建文件夹lib,并右击Add as Library

image-20231207170724519

4.将该jar包复制到该lib文件夹下就能使用了

3.示例代码

image-20231207171203451

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

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

相关文章

服务器数据恢复-误操作导致xfs分区数据丢失的数据恢复案例

服务器数据恢复环境: 某品牌OceanStorT系列某型号存储MD1200磁盘柜,组建的raid5磁盘阵列。上层分配了1个lun,安装的linux操作系统,划分两个分区,分区一通过lvm进行扩容,分区二格式化为xfs文件系统。 服务器…

初级数据结构(七)——二叉树

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;六&#xff09;——堆 | NULL 下一篇-> 1、写在前面 二叉树的基本概念在《初级数据结构&#xff08;五&#xff09;——树和二叉树的概念》中已经介绍得足够详细了。上一…

海康威视对讲广播系统 RCE漏洞复现(CVE-2023-6895)

0x01 产品简介 Hikvision Intercom Broadcasting System是中国海康威视(Hikvision)公司的一个对讲广播系统。 0x02 漏洞概述 Hikvision Intercom Broadcasting System 3.0.3_20201113_RELEASE(HIK)版本存在操作系统命令注入漏洞,该漏洞源于文件/php/ping.php的参数jsonda…

虾皮跨境电商物流:打造高效便捷的全球供应链解决方案

随着全球化的推进和电子商务的蓬勃发展&#xff0c;跨境电商物流成为了越来越多商家和消费者关注的焦点。虾皮&#xff08;Shopee&#xff09;作为一家领先的电商平台&#xff0c;不仅提供了丰富多样的商品选择&#xff0c;还致力于为卖家和消费者提供高效便捷的跨境电商物流服…

conda环境下执行conda命令提示无法识别解决方案

1 问题描述 win10环境命令行执行conda命令&#xff0c;报命令无法识别&#xff0c;错误信息如下&#xff1a; PS D:\code\cv> conda activate pt conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&a…

SpringIOC之LocaleContext

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

使用Mosquitto/python3进行MQTT连接

一、简介 MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上&#xff0c;是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议&#xff0c;为此&#xff0c;它需要一个消息中间件。 …

用BEVformer来卷自动驾驶-1

之所以是-1,是因为大概率1篇文章写不完,但是又不知道应该用几篇来说事,先写着看 按照惯例,上论文地址:2203.17270v1.pdf (arxiv.org) 什么是BEV, Birds -Eye-View的意思,就是鸟瞰 比如稍微传统一些的自动驾驶,大部分的实现。如果靠纯CV的方案的话,那么基本…

P73 bert奇闻

同一个字&#xff0c;前后接的不同&#xff0c;词汇的意思不同&#xff0c;通过bert 之后输出的向量也不一样。 bert 输出后的向量包含上下文的信息。 比如 吃苹果 和苹果电脑中的 果&#xff0c;向量不一样。 DNA 分类 把DNA 的 A T C G 用 we you he she 表示&#xff0c;然…

构建现代企业培训系统的技术实践

在当今竞争激烈的商业环境中&#xff0c;企业培训系统成为提高员工技能、促进组织发展的关键组成部分。本文将深入探讨构建现代企业培训系统的关键技术实践&#xff0c;旨在帮助企业更好地满足学员需求、提高培训效果。 1. 系统架构设计 现代企业培训系统的成功建设始于一个…

Java版企业电子招投标系统源代码,支持二次开发,采用Spring cloud微服务架构

招投标管理系统是一个集门户管理、立项管理、采购项目管理、采购公告管理、考核管理、报表管理、评审管理、企业管理、采购管理和系统管理于一体的综合性应用平台。它适用于招标代理、政府采购、企业采购和工程交易等业务的企业&#xff0c;旨在提高项目管理的效率和质量。该系…

关于redis单线程和IO多路复用的理解

首先&#xff0c;Redis是一个高性能的分布式缓存中间件。其复杂性不言而喻&#xff0c;对于Redis整体而言肯定不是只有一个线程。 我们常说的Redis 是单线程&#xff0c;主要是指 Redis 在网络 IO和键值对读写是采用一个线程来完成的&#xff0c;这也是 Redis 对外提供键值存储…

Zabbix6 使用Agent2实现证书监控的详细步骤

目标 我们的目标是通过获取网站的证书信息来实现网站证书监控。 使用agent2的key 只需使用其中的key&#xff0c;就能实现我们的目标功能。然而&#xff0c;由于它返回的是json格式的数据&#xff0c;我们需要根据数据来配置监控项目&#xff08;item&#xff09;和触发器&am…

从功能测试到测试开发,薪资翻倍,我整理的全网最全学习指南!

在这个吃技术的IT行业来说&#xff0c;我刚入行的时候每天做的也是最基础的工作&#xff0c;但是随着时间的消磨&#xff0c;我产生了对自我和岗位价值和意义的困惑。 一是感觉自己在浪费时间&#xff0c;另一个就是做了快2年的测试&#xff0c;感觉每天过得浑浑噩噩&#xff…

Mac查询本机ip地址

Mac系统版本和网络配置不同&#xff0c;可能会有一些细微差别。 一、 使用系统偏好设置 1、点击屏幕左上角的Apple图标&#xff0c;选择“系统偏好设置”。 2、点击“网络”。 3、 在左侧选择当前连接的网络&#xff08;如Wi-Fi或以太网&#xff09;&#xff0c;在右侧界面&a…

Leetcode—73.矩阵置零【中等】

2023每日刷题&#xff08;六十六&#xff09; Leetcode—73.矩阵置零 空间复杂度为O(mn)版实现代码 class Solution { public:void setZeroes(vector<vector<int>>& matrix) {int rowLen matrix.size();int colLen matrix[0].size();vector<int> row…

【第七在线】可持续时尚与商品计划:减少库存浪费的方法

随着可持续时尚的崭露头角&#xff0c;服装企业越来越重视减少库存浪费。库存浪费不仅对环境造成负面影响&#xff0c;还对企业的经济可持续性产生负面影响。本文将深入探讨可持续时尚与商品计划之间的关系&#xff0c;以及一些减少库存浪费的方法&#xff0c;有助于改进商品计…

BearPi Std 板从入门到放弃 - 引气入体篇(11)(SPI驱动 TFT LCD(ST7789))

简介 SPI 驱动 ST7789V2 进行字符显示, 并且使用中文库显示中文信息。主芯片: STM32L431RCT6LED : PC13 \ 推挽输出即可 \ 高电平点亮串口: Usart1 / LPUARTSPI(与LCD数据传输) : SPI2LCD_RESET&#xff08;复位引脚&#xff09;: PC7 \ 推挽输出即可 LCD_POWER&#xff08;…

Java自动化测试系列[v1.0.0][常见页面操作处理]

[控制滚动] package util; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement;public class ScrollBarUtil {/*** 控制滚动条向下拉到底* param driver 浏览器驱动*/public static void toBottom…

简单了解一下当前火热的大数据 -- Kylin

神兽麒麟 一、Apache Kylin 是什么&#xff1f;二、Kylin架构结语 一、Apache Kylin 是什么&#xff1f; 由eBay公司中国团队研发&#xff0c;是一个免费开源的OLAP多维数据分析引擎优点 超快的响应速度&#xff0c;亚秒级支持超大数据集&#xff08;PB以上&#xff0c;千亿记…