IO流的学习

news2025/1/11 18:45:28

文章目录

  • 一、File类的使用
    • 创建File实例
    • File常用方法
    • 总结
  • 二、IO流分类
    • 读入数据的基本操作
      • 步骤(第一种)
      • 步骤(第二种)
    • 写出数据的基本操作
      • 步骤
    • 读入并写出数据的基本操作(复制)
      • 步骤
      • 注意
    • 处理流之一:缓冲流的使用
    • 处理流之二:转换流的使用
    • 其他流(了解)
      • 标准的输入、输出流
      • 打印流
      • 数据流
    • 对象流
      • 随机存取文件流
      • 每日一考

一、File类的使用

1、File类的一个对象,代表一个文件或一个文件目录(俗称就是文件夹)
2、File类声明在java.io包下

创建File实例

1、相对路径:相较于某个指定的路径下,指明的路径
绝对路径:包含盘符在内的文件或文件目录的路径
在这里插入图片描述
2、路径分隔符
在这里插入图片描述
3、实例化的方法
File(String FilePath)
File(String parentPath,String childPath)
File(File parentFile,String childPath)

在这里插入图片描述
在这里插入图片描述

File常用方法

1、
public String getAbsolutePath():获取绝对路径
public String getPath():获取路径
public String getName():获取名称
public String getParent():获取上层文件目录路径,若无,返回null
public long length():获取文件长度
public long lastModified():获取最后一次修改时间,毫秒值
public String[ ] list():获取指定目录下的所有文件或文件目录的名称数组
public File[ ] listFiles():获取指定目录下的所有文件或文件目录的File数组(有路径的)
public boolean renameTo(File dest):把文件重命名为指定的路径,比如,file1renameTo(file2),要想保证返回true,需要file1在硬盘中是存在的,file2不能在硬盘中存在

2、判断
public boolean isDirectory():判断是否是文件目录(File不是文件目录,就是文件,只能二选一)
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏
如果一个文件或文件目录不存在,那么调用这个对象的这些方法时,返回值都是默认值false,所以建议在对File对象进行操作时,先通过exists判断一下他存不存在
3、创建或删除硬盘中对应的文件或文件目录
public boolean createNewFile():创建文件,若文件存在,则不创建,返回false
public boolean mkdir():创建文件目录,如果此文件目录存在,则不创建。如果此文件的赏赐目录也不存在,则也不创建
public boolean mkdirs():创建文件目录。如果此文件的赏赐目录也不存在,则一并创建
public boolean delete():删除文件或文件夹
【注意】要删除文件目录,需要确保这个目录下不能有子文件或

总结

File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,但不涉及写入或读取文件内容的操作,如果需要写入或读取文件内容,需要使用IO流来完成
后续File类对象常会作为参数传入到流的构造器中,指明读取或写入的“终点”

二、IO流分类

按照操作数据的单位不同,可以分为:字符流、字节流
按照数据的流向不同分为:输入流、输出流
按照角色不同分为:节点流、处理流
1、IO流共涉及40多个类,但是主要从四个抽象类衍生出:
在这里插入图片描述
2、有这四个抽象基类派生的:
节点流(文件流):FileInputStream、FileOutputStream、FileReader、FileWriter
缓冲流(处理流的一种):BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter

读入数据的基本操作

1、read()理解:返回读入的一个字符,如果达到文件末尾,返回-1
2、异常的处理:为了保证资源一定可以执行关闭操作,需要使用try-catch-finally
3、读入的文件一定要存在,否则会报 文件不存在的异常

步骤(第一种)

1、实例化File对象,指明要操作的文件(必须存在)
2、提供具体的流(实例化一个流)
3、数据读入
4、流的关闭操作(必须写)

在这里插入图片描述
在这里插入图片描述

步骤(第二种)

read(char[ ] cbuf):返回每次读入cbuf数组中字符的个数。如果达到文件末尾,则返回-1

在这里插入图片描述
错误写法的原因:创建char数组后,加入数组中的数据是helloworld123,每次读入5个,则最后一次只能读入3个,在读入之前,数组中还保留着上次读入的内容即world,但是最后一次只读入了3个字符,把world的前三个覆盖了,所以此时数组中的内容为123ld,按照第一种错误的方式,最后的输出结果是helloworld123

写出数据的基本操作

1、输出操作,对应的File可以是不存在的,如果不存在,会自动创建此文件;如果存在:
如果流使用的构造器是FileWriter(file, false)或fileWriter(file),会对原有文件内容覆盖
如果流使用的构造器是FileWriter(file, true):不会对源文件覆盖,而是在原有文件基础上进行追加操作

步骤

1、实例化File对象,指明要操作的文件
2、提供具体的流(实例化一个流)
3、数据写出
4、流的关闭操作(必须写)

throws后面还需要改成try-catch在这里插入图片描述

读入并写出数据的基本操作(复制)

步骤

1、实例化File对象,指明要读入和写出的文件
2、提供具体的读入和写出流
3、数据读入、写出操作
4、流的关闭操作(必须写)

在这里插入图片描述

注意

1、不能使用字符流处理图片等字节数据
2、对于文本文件(.txt,.c,.java,.cpp),用字符流处理
3、对于非文本文件(.doc,.jpg,.mp3,.mp4,.avi,.ppt等),用字节流处理

处理流之一:缓冲流的使用

1、BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
2、作用:对流的读入和写出速度的提升
原因:内部提供了一个缓冲区
3、关闭资源时:先关闭外面,再关闭里面。在关闭外层流的同时,内层流也被关闭,所以内层流的关闭可以省略
4、处理流,就是“套接”在已有流的基础上

在这里插入图片描述
在这里插入图片描述

5、与前面的类不同的是,缓冲流中新定义了两个方法:
readLine():一次读一行
newLine():写出一个换行符
写出操作中有方法:flush(),是刷新缓冲区的,因为这几个缓冲类中都有这个方法,所以可以省略;后买你如果遇到没有的,需要自己写

处理流之二:转换流的使用

1、转换流:属于字符流
InputStreamReader:可以将字节的输入流转换为字符的输入流
OutputStreamWriter:可以将字符的输入流转换为字节的输入流
在这里插入图片描述

2、作用:提供字节流和字符流之间的转换
3、
解码:字节、字节数组——>字符串、字符串数组
编码:字符串、字符串数组——>字节、字节数组
4、参数二指明了字符集,具体取决于文件保存时使用的字符集
在这里插入图片描述

其他流(了解)

标准的输入、输出流

1、System.in:标准的输入流,默认从键盘输入,类型是InputStream
System.out:标准的输出流,默认从控制台输出,类型是PrintStream,是OutputStream的子类
2、System类的setIn()和setOut()重新指定输入输出流

这里的equals前面最好写字符或字符串,后面写变量,能够避免空指针的问题!!!在这里插入图片描述

打印流

1、PrintStream、PrintWriter
2、提供了一系列重载的print()和println()
在这里插入图片描述
作用:不让字符从控制台输出,而是新建了一个打印流,让它输出到指定的地方

数据流

1、DataInputStream、DataOutputStream
2、作用:用于读取或写出基本类型的变量或字符串
在这里插入图片描述
【注意】读取不同类型的顺序,要与当初写出的顺序一致

在这里插入图片描述
在这里插入图片描述

对象流

1、ObjectInputStream、ObjectOutputStream
2、作用:可以存储或读取基本数据类型的数据或对象的处理流
3、对象序列化机制:允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点,当其他程序获取了这种二进制流,就可以恢复成原来的Java对象
4、
序列化:将内存中的Java对象保存到磁盘或从网络中传输出去
使用ObjectOutputStream
反序列化:将磁盘文件中的对象还原为内存中的一个Java对象
使用ObjectInputStream
5、要想自定义的类能够序列化,必须满足以下要求:
①需要实现Serializable接口
②需要当前类提供一个全局常量serialVersionUID(序列版本号),并提供一个值
③除了当前类需要实现Serializable接口,还必须保证其内部属性也必须是可序列化的(属性所在的类实现Serializable接口、类中有serialVersionUID),默认情况下,基本数据类型都是可序列化的
在这里插入图片描述
序列化:
在这里插入图片描述
反序列化:
在这里插入图片描述
6、补充:ObjectInputStream和ObjectOutputStream不能序列化static和transient修饰的成员变量

随机存取文件流

RandomAccessFile的使用:
1、RandomAccessFile直接继承于java.lang.Object类,而且实现了DataInput和DataOutput接口
2、RandomAccessFile既可以作为一个输入流,又可以作为一个输出流
在这里插入图片描述
3、如果RandomAccessFile作为输出流,写出到的文件如果不存在,则自动创建该文件;如果存在,则会对原有文件内容进行覆盖,默认情况下,覆盖是从头开始
4、void seek(long pos):将文件记录指针定位到pos位置

每日一考

在这里插入图片描述

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

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

相关文章

【Nginx】静态资源部署(下)

文章目录静态资源的缓存处理缓存概述浏览器缓存相关指令expires指令add_header指令Nginx的跨域问题解决同源策略跨域问题跨域问题的案例演示解决方案静态资源防盗链什么是资源盗链Nginx防盗链的实现原理:针对目录进行防盗链静态资源的缓存处理 缓存概述 什么是缓存…

【爪洼岛冒险记】第4站:Java中如何进行控制台输入输出?用Java实现猜数字小游戏;超详细讲解Java中的方法:方法的重载,方法的签名

🌱博主简介:是瑶瑶子啦,一名大一计科生,目前在努力学习JavaSE。热爱写博客~正在努力成为一个厉害的开发程序媛! 📜所属专栏:爪洼岛冒险记【从小白到大佬之路】 ✈往期博文回顾:链接: 【爪洼岛冒…

【文件指针+文件顺序读写操作函数】

1.文件的打开和关闭 1.1 什么是文件指针 2.文件操作函数 2.1 fgetc函数和fputc函数2.2 fgets函数和fputs函数2.3 fscanf函数和fprintf函数2.4 fwrite函数和fread函数 1.文件的打开和关闭 1.1 什么是文件指针? 每个被使用的文件都在内存中开辟了一个相应的文件…

文件操作详解

文章目录前言一、什么是文件?1.程序文件2.数据文件3.文件名二、文件的打开和关闭1.文件指针2.文件的打开和关闭3.打开模式汇总4.例子三.操作函数介绍1.基本函数2.fseek2.ftell3.rewind4.feof尾话前言 恐怕很多人学完了c语言甚至不知道文件操作,也确实&am…

FPGA学习笔记-知识点3-Verilog语法1

1.关键字 2.运算符 按其功能可分为以下几类: 1) 算术运算符(,&#xff0d;,&#xff0c;/,&#xff05;) 2) 赋值运算符(,<) 3) 关系运算符(>,<,>,<) 4) 逻辑运算符(&&,||,!) 5) 条件运算符( ? &#xff1a;) 6) 位运算符(,|,^,&,^) …

【微信小程序】动态设置导航栏标题

&#x1f3c6;今日学习目标&#xff1a;第十八期——动态设置导航栏标题 &#x1f603;创作者&#xff1a;颜颜yan_ ✨个人主页&#xff1a;颜颜yan_的个人主页 ⏰预计时间&#xff1a;25分钟 &#x1f389;专栏系列&#xff1a;我的第一个微信小程序 文章目录前言使用配置文件…

消息中间件简介

UNIX的进程间通信就开始运用消息队列技术&#xff0c;一个进程将数据写入某个特定的队列中&#xff0c;其它进程可以读取队列中的数据&#xff0c;从而实现异步通信。对于如今的分布式系统&#xff0c;消息队列已经演变为独立的消息中间件产品&#xff0c;相比于RPC同步通信的方…

设计模式_行为型模式 -《模板方法模式》

设计模式_行为型模式 -《模板方法模式》 笔记整理自 黑马程序员Java设计模式详解&#xff0c; 23种Java设计模式&#xff08;图解框架源码分析实战&#xff09; 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象都…

测试开发 | AppCrawler 自动遍历测试实践(三):动手实操与常见问题汇总

上两篇文章介绍了自动遍历的测试需求、工具选择和 AppCrawler 的环境安装、启动及配置文件字段基本含义&#xff0c;这里将以实际案例更加细致的说明配置文件的用法和一些特殊场景的处理。 实操演示 常规使用 下面我们继续之前的例子&#xff0c;在雪球搜索框输入搜索内容后的页…

代码随想录算法训练营第六天 | 哈希表理论基础,242.有效的字母异位词,349. 两个数组的交集, 202. 快乐数,1. 两数之和

第五天 周日 休息~【提醒补坑&#xff1a;链表总结还没写】一、参考资料哈希表理论基础文章连接&#xff1a;https://programmercarl.com/%E5%93%88%E5%B8%8C%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html有效的字母异位词题目链接/文章讲解/视频讲解&#xff1a;https:…

使用批处理__更改ip

1、使用.bat进行处理 echo off rem 测试更改ip netsh int ip set address "以太网 2" static 10.10.2.1 255.255.255.0 10.10.2.254 1 pause&exit 备注其他 echo #设静态IP netsh interface ip set address name"本地连接" sourcestatic addr192.16…

大坝安全监测解决方案 水库大坝安全监测系统改造工程方案

平升电子大坝安全监测系统根据SL551-2012《土石坝安全监测技术规范》的整编要求&#xff0c;设置了变形监测、渗流监测、环境量监测。借助大坝安全监测系统可及时了解大坝的工作性态和水库可能存在的事故隐患&#xff0c;为大坝安全管理与水库运行调度提供了准确、及时的现场信…

ElasticSearch7.10配置Search-Guard之配置用户

ElasticSearch7.10配置Search-Guard之配置用户 配置sg_internal_user.yml 密码是&#xff1a;elastic jode:hash: $2y$12$nUzkcjdnufzvI1HlmN7xSuND3skGhmwV5le5IINejz.asMFpLYNRybackend_roles:- "hr_department"psmith:hash: $2y$12$nUzkcjdnufzvI1HlmN7xSuND3sk…

[标准库]STM32F103R8T6 标准库配置RCC时钟和超频

前言 这篇博客总结一下学习到的配置时钟的方法。 从启动文件来看&#xff0c;MCU复位之后&#xff0c;执行到SystemInit()这个函数之后&#xff0c;会进入系统初始化设置&#xff0c;比如根据当前的MCU型号进入不同的条件编译语句&#xff0c;再配置相应的寄存器初始值&#…

mysql之一条mysql语句时如何执行的

请把连接器的功能说明一下? 连接器负责建立客户端和mysql服务器之间的连接.当客户端在中断输入连接命令(mysql -h -u -p),传输层使用tcp协议,通过三次握手建立连接. 如果mysql服务服务没有启动,会报错: 如果mysql服务正常启动,完成三次握手,在传输层建立连接后,会进行密码验证…

【云原生】k8s 一键部署(ansible)

文章目录一、概述二、Ansible 部署1&#xff09;开启记录日志2&#xff09;去掉第一次连接ssh ask确认3&#xff09;配置hosts三、开始编排 ansible playbook1&#xff09;创建目录2&#xff09;节点初始化3&#xff09;安装 docker4&#xff09;安装 k8s 相关组件5&#xff09…

2022 年 12 月区块链操作系统的开发回顾

正在寻找区块链操作系统组件的最新进展&#xff1f;你找对地方了&#xff01;正如在我们的路线图文章中所描述的那样&#xff0c;我们一直在朝着定期且频繁的更新方向发展着&#xff0c;以便让我们的社区能够及时的了解到我们取得的进展&#xff0c;以及将区块链操作系统提升到…

新年喜报 再添殊荣 加速科技荣获浙江省“专精特新”企业认定

新年伊始&#xff0c;杭州市经济和信息化局公布了2022年度浙江省专精特企业名单。杭州加速科技有限公司&#xff08;以下简称“加速科技”&#xff09;凭借在技术创新、产品研发、精细化程度、经营能力、拓展潜力等多方面的优势&#xff0c;荣获浙江省“专精特新”企业荣誉称号…

一个人,一座城,你到底在乎什么?Python 爬虫告诉你!

大家好&#xff0c;我是安果&#xff01;有时候&#xff0c;我们想知道生活在这座城市的人每天交流的事情&#xff0c;然后对数据进行一些分析&#xff0c;方便我们更好地了解城市的特征及居民的需求以重庆为例&#xff0c;最火爆的论坛是购物狂&#xff0c;每天都有大量的帖子…

求解带不确定事件的FJSP的多目标强化学习框架

文献&#xff1a;Hao Wang, Junfu Cheng, Chang Liu, Yuanyuan Zhang, Shunfang Hu, Liangyin Chen,Multi-objective reinforcement learning framework for dynamic flexible job shop scheduling problem with uncertain events,Applied Soft Computing,Volume 131,2022,1097…