字节流,字符流

day23

内容

  • IO流
  • 字节流
  • 字符流
  • 异常处理
  • Properties

一.IO概述

1.1 什么是IO

数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为 输入input 和 输出output ,即流向内存是输入流,流出内存的输出流

Java中I/O操作主要是指使用 java.io 包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。

1.2 IO的分类

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

  • 输入流:数据从其他设备到内存中的流
  • 输出流:数据从内存到其他设备上的流

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

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

1.3 顶级父类们

在这里插入图片描述

二. 字节流

2.1一切皆为字节

2.2 字节输出流[OutputStream]

  • 关闭流:public void close() :关闭此输出流并释放与此流相关联的任何系统资源
  • 刷新:public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。
  • 写到输出流:public void write(byte[] b) :将 b.length字节从指定的字节数组写入此输出流。
  • 写到输出流:public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流
  • public abstract void write(int b) :将指定的字节输出流。

2.3 FileOutStream类

文件输出流:上面那个类的子类,用于将数据写到文件

构造方法:

  • public FileOutputStream(File file) :创建文件输出流 用来写入file文件
  • public FileOutputStream(String name) : 创建文件输出流并取名字。

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

public class FileOutputStreamConstructor throws IOException {
public static void main(String[] args) {
// 使用File对象创建流对象
File file = new File("a.txt");
FileOutputStream fos = new FileOutputStream(file);
// 使用文件名称创建流对象
FileOutputStream fos = new FileOutputStream("b.txt");
}
}

写出字节数据
1.写出字节
在这里插入图片描述
2.写出字节数组

在这里插入图片描述
3.写出指定长度字节数组
在这里插入图片描述
数组追加续写

  • public FileOutputStream(File file, boolean append) :创建文件输出流 写入file文件
  • public FileOutputStream(String name, boolean append):创建文件输出流 用指定的明后才能写入文件

true 表示追加数据, false 表示清空原有数据

// 使用文件名称创建流对象
FileOutputStream fos = new FileOutputStream("fos.txt"true);
// 字符串转换为字节数组
byte[] b = "abcde".getBytes();
// 写出从索引2开始,2个字节。索引2是c,两个字节,也就是cd。
fos.write(b);
// 关闭资源
fos.close();


写出换行

在这里插入图片描述

在这里插入图片描述

2.4字节输入流[InputStream]

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

  • public void close():关闭输入流并释放与此流相关的任何系统资源
  • public abstract int read():从输入流读取数据的下一个字节.
  • public int read(byte[] b):从输入流中读取一些字节数,并将它们存储到数组b中

2.5 FileInputStream类

java.io.FileInputStream 类是文件输入流,从文件中读取字节。

构造方法:

  • FileInputStream(File file) : 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
  • FileInputStream(String name) : 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
//使用File对象创建流对象
File file = new File("a.txt");
FileInputStream fos = new FileInputStream(file);

//使用文件名称创建流对象
FileInputStream fos = new FileInputStream("b.txt");

读取字节数据

  1. 读取字节:read方法,每次读取一个字节的数据,虽然读取了一个字节,但是会自动提升为int类型。
  2. 使用字节数组读取: read(byte[] b) ,每次读取b的长度个字节到数组中,返回读取到的有效字节个数
    使用数组读取,每次读取多个字节,减少了系统间的IO操作次数,从而提高了读写的效率,建议开发中使用

三.字符流

当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。

3.1字符输入流[Reader]

抽象类是表示用于读取字符流的所有类的超类
close方法 read方法 …

3.2 FileReader类

读取字符文件的便利类

构造方法
在这里插入图片描述

//使用File对象创建对象
File file = new File("a.txt");
FileReader fr = new FileReader(file);

//使用文件名创建流对象
FileReader fr = new FileReader("b.txt");

读取字符数据

  1. 读取字符 :read方法
  2. 使用字符数组读取:read(char[] cbuf)

3.3字符输出流[Writer]

四.IO异常处理

JDK7之前的处理 try…catch…finally代码块
JDK7的处理 try…with…resource语句

try(FileWriter fw = new FileWriter("fw.txt"); )
{
	//FileWriter fw = new FileWriter("fw.txt");
	fw.write("黑马程序员");
}
catch(IOException e)
{
	
}

在这里插入图片描述
JDK9的改进
在这里插入图片描述

五.属性集

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

5.1Properties类

构造方法
public Properties() :创建一个空的属性列表
基本的存储方法

  • public Object setProperty(String key, String value) : 保存一对属性。
  • public String getProperty(String key) :使用此属性列表中指定的键搜索属性值
  • public Set stringPropertyNames() :所有键的名称的集合。
//创建属性集对象
Properties properties = new Properties();

//添加键值对元素
properties.setProperty("filename","a.txt");

//打印属性
System.out.println(properties);

//通过键,获取属性值
public Set<String> stringPropertyNames() :所有键的名称的集合。

//遍历属性集
Set<String> strings = properties.stringPropertyNames();
// 打印键值对
for (String key : strings ) 
{
System.out.println(key+" ‐‐ "+properties.getProperty(key));
}

与流相关的方法

  • public void load(InputStream inStream) : 从字节输入流中读取键值对
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bussyman

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值