当前位置: 首页 > news >正文

Java基础 Day22

一、IO 流

1、简介

I:Input(输入,读取)

O:Output(输出,写出)

主要用途:数据传输

2、体系结构

(1)字节流(万能流)

抽象类:InputStream(字节输入流)、OutputStream(字节输出流)

抽象类的子类:FileInputStream、FileOutputStream

用字节流操作纯文本文件时可能出现乱码

(2)字符流(操作纯文本文件)

抽象类:Reader(字符输入流)、Writer(字符输出流)

抽象类的子类:FileReader、FileWriter

二、FileOutputStream 字节输出流

1、构造方法

FileOutputStream(String name)

输出流关联文件, 文件路径以字符串形式给出

FileOutputStream(String name, boolean append)

第二个参数是追加写入的开关

FileOutputStream(File file)

输出流关联文件, 文件路径以File对象形式给出

FileOutputStream(File file, boolean append)

第二个参数是追加写入的开关

2、常用方法

void write(int b) 

写出单个字节

void write(byte[] b) 

写出一个字节数组

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

写出字节数组的一部分

FileOutputStream f1 = new FileOutputStream("./day22/src/t1.txt");
f1.write(97);
byte[] arr = {97, 98, 99};
f1.write(arr);
f1.write("\nHello World\n".getBytes());
f1.write("Hello Java\n".getBytes());
f1.close();t1.txt 的内容:
aabc
Hello World
Hello Java

 

3、注意事项

关联的文件如果不存在,自动创建;如果存在,默认是覆盖写入

流对象使用完后,要用close方法关流,防止占用资源

4、标准的关流代码

JDK7之后

try () 中的对象, 需要实现过 AutoCloseable 接口

try (需要调用close方法的对象) {逻辑代码...
} catch (异常类名 对象名) {异常的处理方式
}// 会自动调用close方法              try (FileOutputStream f2 = new FileOutputStream("./day22/src/t2.txt")) {f2.write("Hello World\n".getBytes());
} catch (IOException e) {e.printStackTrace();
}                     

三、FileInputStream 字节输入流

1、构造方法

FileInputStream(String name) 

输入流关联文件, 文件路径以字符串形式给出

FileInputStream(File file) 

输入流关联文件, 文件路径以File对象形式给出

关联的文件不存在会抛出 FileNotFoundException 异常

文件夹的话会拒绝访问

2、常用方法

int read() 

读取一个字节并返回, 如果到达文件结尾则返回 -1

int read(byte[] b) 

将读取到字节, 放到传入的数组

返回读取到的有效字节个数

如果到达文件结尾则返回 -1

将读到的内容转换为字符串,用String 类的一个构造方法

public String

(byte[] bytes, int offset, int length)

将字节数组转换为字符串

参数1 : 字节数组

参数2 : 起始索引

参数3 : 转换的个数

四、字节缓冲流

字节缓冲流在源代码中内置了字节数组,可以提高读写效率

BufferedInputStream(InputStream in)

对传入的字节输入流进行包装

BufferedOutputStream(OutputStream out)

对传入的字节输出流进行包装

注意: 缓冲流不具备读写功能, 它们只是对普通的流对象进行包装

真正和文件建立关联的, 还是普通的流对象

原理:读入时一次读入8192个字节将内置数组装满再一并读入

输出时写出8192个字节将内置数组装满再一并写出(close方法会检查内置数组)

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("./day22/src/t1.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("./day22/src/t3.txt"));
byte[] bytes = new byte[1024];
int len = 0;
while ((len = bis.read(bytes)) != -1) {bos.write(bytes, 0, len);
}
bis.close();
bos.close();

五、字符集和字符编码

1、字符集

字符集是指多个字符的集合

常用的有GBK、Unicode等字符集

2、字符编码

字符编码是指一种映射规则

根据这个规则可以将某个字符映射成其他形式的数据以便在计算机中存储和传输

GBK:每个中文占用2个字节

Unicode:每个中文占用3个字节(有UTF-32、UTF-16、UTF-8等编码方式)

编码指字符转字节,解码指字节转字符

中文字节以负数开头

六、FileReader 字符输入流

1、构造方法

FileReader(String fileName)

字符输入流关联文件,路径以字符串形式给出

FileReader(File file)

字符输入流关联文件,路径以File对象形式给出

2、常用方法

public int read() 

读取单个字符

public int read(char[] cbuf) 

读取一个字符数组, 返回读取到的有效字符个数

七、FileWriter 字符输出流

1、构造方法

FileWriter(String fileName)

字符输出流关联文件,路径以字符串形式给出

FileWriter(String fileName, boolean append) 

参数2: 追加写入的开关

FileWriter(File file)

字符输出流关联文件,路径以File对象形式给出

FileWriter(File file, boolean append)

参数2: 追加写入的开关

2、常用方法

public void write(int c) 

写出单个字符

public void write(char[] cbuf) 

写出一个字符数组

public write(char[] cbuf, int off, int len)

写出字符数组的一部分

public void write(String str) 

写出字符串

public void write(String str, int off, int len) 

写出字符串的一部分

字符输出流写出数据,需要调用flush或close方法,数据才会写出

Flush后可以继续写出,Close 后不能继续写出

http://www.xdnf.cn/news/682129.html

相关文章:

  • python变量如何理解?
  • 图像分割全路线学习(结合论文)
  • go build -gcflags 参数学习
  • Spring Boot事务失效场景及解决方案
  • 自动驾驶决策规划框架详解:从理论到实践
  • 【C语言干货】回调函数
  • endnote2025安装教程以及激活文件
  • ELectron 中 BrowserView 如何进行实时定位和尺寸调整
  • Asp.Net Core 如何配置在Swagger中带JWT报文头
  • leetcode hot100刷题日记——21.不同路径
  • 六、西方哲学
  • 【连载19】基础智能体的进展与挑战综述-对智能体大脑的威胁
  • halcon高斯滤波
  • 网络编程--上篇
  • 【详细记录】我的第一次裸片硬件尝试:stm32f103c8t6最小核心板一板成
  • unet 视频截图 实现简单的unet kaggle运行
  • Kruskal-Wallis检验 vs. 多次Wilcoxon检验:多重比较-spss
  • LCR 094. 分割回文串 II
  • Elasticsearch搜索机制与分页优化策略
  • Pytest自动化测试框架搭建:Jenkins持续集成
  • 通俗解释网络参数RTT(往返时间)
  • Scratch节日 | 六一儿童节
  • 并发编程(二)—synchronized和volatile
  • 尚硅谷redis7 55-57 redis主从复制之理论简介
  • 从零搭建上门做饭平台:高并发订单系统设计
  • 普罗米修斯监控CPU\内存汇聚图
  • 产业集群间的专利合作关系
  • Visual Studio编译当前文件
  • vue项目 build时@vue-office/docx报错
  • ceph recovery 相关参数