Java (IO流)

 一,IO流

1.IO流介绍

以前我们是通过变量,数组,或者集合存储数据,都是不能永久化存储,数据都是存储在内存中,只要代码运行结束,所有数据都会丢失

IO流的目的:

  • 将数据写到文件中,实现数据永久化存储
  • 把文件中的数据读取到内存中(Java程序)

I 表示intput ,是数据从硬盘进内存的过程,称之为数据。

O 表示output ,是数据从内存到硬盘的过程。称之为数据。

2.IO的分类

根据数据的流向分为:输入流和输出流

  • 输入流:把数据从硬盘上读取到内存中的流。
  • 输出流:把数据从内存 中写出到硬盘上的流。

根据数据的类型分为:字节流和字符流

  • 字节流:以字节为单位,操作所有类型的文件,包括音频视频图片等
  • 字符流:以字符为单位,只能操作纯文本文件。能用windows记事本打开并能读的懂。

3.IO的顶层父类

  • 字节输入流:顶层父类 InputStream 抽象类
  • 字节输出流:顶层父类 OutputStream 抽象类
  • 字符输入流:顶层父类 Reader 抽象类
  • 字符输出流:顶层父类 Writer 抽象类

二.字节流

节流可以传输任意文件数据。在操作流的时候,要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据。

1.字节输出流OutputStream

java.io.OutputStream 抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的它定义了字节输出流的基本共性功能方法。

  • public abstract void write(int b):一次写一个字节数据。
  • public void write(byte[] b):一次写一个字节数组数据。
  • public void write(byte[] b, int off, int len) :一次写一个字节数组的部分数据
  • public void close():关闭此输出流并释放与此流相关联的任何系统资源。

2.FileOutputStream

java.io.FileOutputStream类是OutputStream类的子类,用来表示是文件输出流,用于将数据写出到文件。

FileOutputStream类的构造方法

  • public FileOutputStream(File file):创建文件输出流以写入由指定的 File对象表示的文件。
  • public FileOutputStream(String name): 创建文件输出流以指定的名称写入文件。

当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有这个文件,会创建该文件。如果有这个文件,会清空这个文件的数据。

3 数据换行与追加

以上的演示,每次程序运行,创建输出流对象,都会清空目标文件中的数据。

保留目标文件中数据,还能继续添加新数据:

public FileOutputStream(File file, boolean append): 创建文件输出流以指定的名称写入文件。如果第二个参数为true ,不会清空文件里面的内容。

public FileOutputStream(String name, boolean append): 创建文件输出流以指定的名称写入文件。如果第二个参数为true ,不会清空文件里面的内容。

换行(windows:\r\n)

4 字节输入流InputStream

java.io.InputStream 抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。它定义了字节输入流的基本共性功能方法。

  • public abstract int read(): 每次可以读取一个字节的数据,提升为int类型,读取到文件末尾,返回 -1。
  • public int read(byte[] b): 每次读取b的长度个字节到数组中,返回读取到的有效字节个数,读取到末尾时,返回 -1。
  • public void close():关闭此输入流并释放与此流相关联的任何系统资源

5. FileInputStream

概述:java.io.FileInputStream 类是InputStream类的子类 , 用来表示文件输入流,从文件中读取字节。

构造方法:

  • FileInputStream(File file): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的文件对象 file命名。
  • FileInputStream(String name): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。

当创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出FileNotFoundException

6 读取字节

nt read(),每次可以读取一个字节的数据,提升为int类型,读取到文件末尾,返回-1。

7 IO资源的处理

8 读字节数组

int read(byte[] b) 每次读取b的长度个字节到数组中,返回读取到的有效字节个数,读取到末尾时,返回-1

三.字节缓冲流

缓冲流,也叫高效流,是对4个基本的FileXxx 流的增强,所以也是4个流,按照数据类型分类:

  • 字节缓冲流:BufferedInputStream,BufferedOutputStream
  • 字符缓冲流:BufferedReader,BufferedWriter

字节缓冲流的构造方法:

字节缓冲流仅仅提供缓冲区,而真正的读写数据还得依靠基本的字节流对象进行操作

  • public BufferedInputStream(InputStream in) :创建一个 新的缓冲输入流。
  • public BufferedOutputStream(OutputStream out): 创建一个新的缓冲输出流。

四.Properties集合

1. Properties类的概述

java.util.Properties 继承于Hashtable,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应值都是一个字符串。

2. Properties类的构造方法

public Properties() :创建一个空的属性列表。

3 .Properties类存储方法

  • public Object setProperty(String key, String value): 保存一对属性。
  • public String getProperty(String key) :使用此属性列表中指定的键搜索属性值。
  • public Set stringPropertyNames() :获取所有键的名称的集合。

4 Properties类与流相关的方法

作用:通过流对象,可以关联到配置文件上,这样就能够加载配置文件中的数据了。

  • public void load(InputStream inStream):以字节流形式 , 把文件中的键值对, 读取到集合中
  • public void load(Reader reader):以字符流形式 , 把文件中的键值对, 读取到集合中
  • public void store(OutputStream out, String comments):把集合中的键值对,以字节流形式写入文件中 , 参数二为注释
  • public void store(Writer writer, String comments):把集合中的键值对,以字符流形式写入文件中 , 参数二为注释

注意事项:文本中的数据,必须是键值对形式,可以使用空格、等号、冒号等符号分隔

如果配置文件中有中文,那么加载文件文件时,使用字符流,但是开发中一般配置文件中不要写中文

5 .ResourceBundle工具类

java.util.ResourceBundle它是一个抽象类我们可以使用它的子类PropertyResourceBundle来读取以.properties结尾的配置文件。

通过静态方法直接获取对象:static ResourceBundle getBundle(String baseName) 可以根据名字直接获取默认语言环境下的属性资源。参数注意: baseName

属性集名称不含扩展名。

属性集文件是在src目录中的

ResourceBundle中常用方法:String getString(String key) : 通过键,获取对应的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值