File、IO流

系列文章目录

总结文件(FIle)的创建使用和方法,以及IO流的创建使用和方法等。比较重要的知识点。

一、File文件

java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建,查找和删除等操作!

构造方法有很多种:

public File(String pathname){}通过给定路径创建File

public File(String parent , String child)通过父抽象路径名加子路径名字符串创建

public FIle(File parent ,String child)通过父File对象和子路径名字符串进行创建

一个File对象代表硬盘中实际存在的一个文件或者目录

无论该路径下是否存在文件或目录,都不影响File对象的创建。

File文件方法:

 delete操作,如果删除的是目录,那么目录需要为空。

目录遍历操作:

二、I/O流(重点)

1.流的分类:

按数据流向分:

输入流:把数据从其他设备上读取到程序中的流

输出流:把数据从程序中写出到其他设备上的流

按数据类型分:

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

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

按功能划分:

节点流(原始流),增强流(包装流)

2.流的结构

四个抽象的父类型:

InputStream:字节输入流类型

OutputStream:字节输出流类型

Reader:字符输入流类型

Writer:字符输出流类型

3. 字节流:

使用流来操作数据的基本步骤:

声明流,创建流,使用流,关闭流

1.文件输入流

FileInputStream,从文件中读取字节数据

构造方法:

1.通过File对象来创建(直接将File对象传参进去)

2.通过文件路径名(字符串)实例化FileInputStream对象

读的方法:三个read:(三个都会抛异常)

当读到文件末尾,返回值为-1,可以用while循环进行判断

read():逐个字节读取,返回值为读取的当个字节

read(byte b[ ] ):小数组读取,将结果存入数组,返回值为读取的字节个数

read(byte b[ ] , int off , int len ):小数组读取,将结果存入数组指定位置,返回值为读取的字节个数,off为偏移量

创建FileInputStream对象时,必须传入一个有效文件路径,否则抛出FileNotFoundException异常!

2.文件输出流

FileOutputStream,用于写入字节数据到文件中

构造方法:

1.通过File对象来创建(直接将File对象传参进去)

2.通过文件路径名(字符串)实例化FileInputStream对象

3.public FileOutputStream(File file或者字符串 ,boolean append)(文件追加)append为true,表示拼接到file文件里,false为清空原数据

三个写的方法:三个write方法:

write():    write(byte b[ ] ):     write(byte b[ ] , int off , int len ):

注意事项:

创建一个输出流对象时传入的文件路径可以不存在(目录路径必须存在),不会抛异常,系统会自动创建该文件

如果有这个文件,系统会默认清空这个文件的数据

关于关闭资源:先关闭后打开的,再关闭先打开的,反序

3.内存输入流

操作内存中的数据选择内存流

使用内存流,我们可以操作内存中字节数组中的数据

java.io.ByteArrayInputStream 内存输入流,负责从内存中的字节数组中读取数据。

构造器:传入一个字节数组,输入的字符串可以通过getByte()方法返回一个字节数组

4.内存输出流

java.io.ByteArrayOutputStream 内存输出流,负责把数据写入到内存中的字节数组中。

构造器:

无参:默认数组大小32字节

有参构造:参数传数组字节的大小

关键方法:

toByteArray():获取内存输出流中存储的数据,返回字节数组

内存流不需要close(),因为操作的数据源是在内存中的,有GC处理。

4.字符流

1.字符流的write重要方法

write(int c): 写入单个字符

write(char[ ] cbuf):写入字符数组

write(char[ ] cbuf , int off , int len):写入字符数组的某一部分,off为字符数组的开始索引,len为字符个数

write(String str):写入字符串

write(String str , int off , int len):写入字符串的某一部分,off为字符串的开始索引,len为字符个数

flush():刷新该留的缓冲

close():关闭该流,但要先刷新

2.文件字符流

FileReader、FileWriter

java.io.FileReader 类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。
java.io.FileWriter 类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。

构造器类似

只能处理纯文本,处理字节文件会出错。

3.异常处理

JDK之后新的:try - catch - resource

把创建流的语句放入try后面的()中用;隔开

5.包装流

其在节点流的基础上提供了额外的功能和操作

增强流提供了更高级的操作和便利性,使得 IO 操作更加方便、高效和灵活

增强流通过装饰器模式包装节点流,可以在节点流上添加缓冲、字符编码转换、对象序列化等功能

6.缓冲流

缓冲流它们通过在内存中创建一个缓冲区,将数据暂时存储在缓冲区中,然后批量读取或写入数据,减少了频繁的磁盘或网络访问,从而提高了读写的性能。

1.常见的缓冲流:

BufferedInputStream 缓冲字节输入流

BufferedOutputStream 缓冲字节输出流

BufferedReader 缓冲字符输入流

BufferedWriter 缓冲字符输出流

2.缓冲字节流

默认缓冲区字节大小为 8192

缓冲流是增强流,其底层借助其他流实现功能,所以构造器要求一定要传入一个字节流对象!

3.缓冲字符流

新增功能:

BufferedReader中的方法:逐行读取数据 readLine(),如果下一行没有数据了返回null

BufferedWriter中的方法:newLine():写一个换行符

ready()方法返回false可理解为:马上要读取到文件尾,可以额外写换行符

7.标准流

标准流是指三个预定义的流对象,用于处理标准输入,标准输出和标准错误,这些都是Java自动创建的,无需显示打开和关闭

标准输入:System.in

标准输出:System.out

标准错误:System.err

我们可以借助 System类中的setXxx方法 修改标准输入输出流的源头和目的地。

8.打印流

PrintStream,PrintWriter

提供print和println方法

9.转换流

1.字符集和字符编码

字符编码 Character Encoding : 一套自然语言字符与二进制数(码点)之间的对应规则。

字符集 Charset :也叫编码表。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等。

2.字节字符转换

java.io.OutputStreamWriter ,可以将字节输出流转换为字符输出流,并指定编码 java.io.InputStreamReader ,可以将字节输入流转换为字符输入流,并指 定编码

需要传参传字节输出输入流,可以最后使用缓冲流增强性能

10.对象流

1.序列化机制

可以将对象和字节序列之间进行转换

2.对象流

要实现serializable接口

ObjectInputStream,readObject

ObjectOutputStream   writeObject

3.transient

短暂的,转瞬即逝的,被该关键字修饰的属性不会被序列化

4.版本号

当一个类实现 Serializable 接口并进行序列化时,如果不显式地定义 serialVersionUID ,系统会根据类的结构和内容自动生成一个默认的序列化 版本号(根据类的名称、实现的接口、成员变量等信息计算得出)

但是,如果类的结构发生了变化(如新增或删除了成员变量、修改了类的继承关 系等),则默认的版本号会发生变化,这可能导致反序列化失败(比如上述场 景)。 为了确保在类的结构发生变化时仍能成功反序列化,可以显式地定义 serialVersionUID 。通过手动定义 serialVersionUID ,可以确保序列化和 反序列化的类版本一致,即使类的结构发生了变化。

11.数据流

DataOutputStream 负责把指定类型的数据,转化为字节并写出去

DataInputStream 负责把读取到的若干个字节,转化为指定类型的数据

读取和写入的顺序一定要一致,因为是按字节进行存储的

12.随机访问流

java.io.RandomAccessFile 是JavaAPI中提供的对文件进行随机访问的流

注意随机访问,不是文件的随机,而是可以访问文件内容的任意位置,通过seek方法

创建该类的对象时,需要指定要操作的文件和操作的模式:

“r” 模式,以只读方式来打开指定文件夹。如果试图对该RandomAccessFile执 行写入方法,都将抛出IOException异常。

“rw” 模式,以读写方式打开指定文件。如果该文件尚不存在,则试图创建该 文件。

“rws” 模式,以读写方式打开指定文件。相对于”rw” 模式,还要求对文件内 容或元数据的每个更新都同步写入到底层设备。

“rwd” 默认,以读写方式打开指定文件。相对于”rw” 模式,还要求对文件内 容每个更新都同步写入到底层设备。

13.Properties类

在 Java 中, Properties 类是一个用于处理配置文件的工具类。配置文件通常 以 .properties 扩展名,用于存储配置信息,如应用程序的设置、数据库连接 参数等。

Properties 类继承自 Hashtable 类,因此它具有 Hashtable 的所有功能, 同时还提供了一些特定于属性文件的方法。

hashtable是一个线程安全的map集合,所以.properties文件必须是键值对存在形式。

使用方式:

创建properties工具类对象,调用load方法从输入流加载到工具类中

调用getProperty方法获取值,可以通过setProperty修改值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值