第五章:IO流 (java.io包中)

一、理解

  1. 简单而言:流就是内存与存储设备之间传输数据的通道、管道。

  2. 分类:

(1) 按方向(以JVM虚拟机为参照物)【重点】

输入流:将存储设备>中的内容读入到内存>中。

输出流:将内存>中的内容写入到存储设备>中。

(2) 按单位:

字节流:以字节为单位,可以操作所有类型的文件。

字符流:以字符为单位,只能操作文本类型的文件。

(3) 按功能:

节点流:具有基本的读写功能。

过滤流:在节点流的基础上,增加新的功能。

二、字节流

  1. 父类:字节流的父类(抽象类):

(1) InputStream:字节输入流

对应的操作为读操作

功能方法:read方法

(2) OutputStream:字节输出流

对应的操作为写操作

功能方法:write方法

  1. 字节节点流

(1) FileOutputStream:字节节点输出流 、文件字节输出流

构造方法:

FileOutputStream fos = new FileOutputStream("D:\\test56/a.txt");

参数:代表操作文件的路径,如果指定的文件夹不存在,则运行报错,

错误信息为:

java.io.FileNotFoundException: D:\test5\a.txt

(系统找不到指定的路径。);如果指定的文件不存在,

系统自动创建

绝对路径:盘符:\\文件夹\\ 文件

相对路径:文件夹/文件,默认在当前的项目中查找对

应的文件夹内容

功能方法:

write(int n):将单个字节写入文件中

close():关闭流

(2) FileInputStream:文件字节输入流

构造方法:

FileInputStream fis = new FileInputStream("file/c.txt");

参数说明:参数代表操作路径,如果指定的文件不存在,则运行报错,

错误信息为:

java.io.FileNotFoundException: file\c.txt (系统找不到指定的文件。)

功能方法:

int read():一次性读取一个字节内容,将读取的内容作为返回值返回,

达到文件尾部时,返回-1

close():关闭流,释放资源

  1. 字节过滤流

(1) 过滤流:BufferedOutputStream/BufferedInputStream

缓冲流,提高IO效率,减少访问磁盘的次数;

数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close。

public class TestFileCopyBuffered {

public static void main(String[] args) throws IOException {

// 1. 创建文件字节输入流+输出流对象

// (1) 创建文件节点流对象

FileInputStream fis = new FileInputStream("D:\\test\\ph.mp4");

// (2) 创建过滤流

BufferedInputStream bis = new BufferedInputStream(fis);

// 写文件

FileOutputStream fos = new FileOutputStream("file/ph_copy.mp4");

BufferedOutputStream bos = new BufferedOutputStream(fos);

// 2. 边读边写

while(true){

int n=bis.read();

if(n==-1) break;

bos.write(n);

}

// 3. 关闭流。释放资源

bis.close();

bos.close();

}

}

三 、 字 符 流

  1. 字 符 流 的 父 类 ( 抽 象 类 ):

**R e a d e r:**字 符 输 入 流

对 应 的 操 作 为 读 操 作

功 能 方 法:r e a d 方 法

**W r i t e r :**字 符 输 出 流

对 应 的 操 作 为 写 操 作

功 能 方 法:w r i t e 方 法

  1. 文件字符流

(1) FileWriter文件字符输出流,继承Writer中的方法:

public void write(int n):将单个字符写入到文件中

(2) FileReader文件字符输入流,继承Reader中的方法:

public int read():一次读取一个字符的内容

  1. 字符过滤流

(1) BufferedReader:

功能方法,readLine():一次性读取一行内容,返回内容为String,

读取达到尾部,返回-1

(2) PrintWriter

println(参数);

  1. 桥转换流

InputStreamReader/OutputStreamWriter:桥转换流;设置 编解码格式

四、File类

  1. IO流:对文件中的内容进行操作。 File类:对文件自身进行操作,例如:删除文件,

文件重新命名等。

  1. 操作:

public class TestFile {

public static void main(String[] args) throws IOException {

File file = new File("file/hh.txt");

/*System.out.println(file.exists());

file.createNewFile();*/

if(file.exists()){

System.out.println("文件存在,则直接使用...");

FileInputStream fis = new FileInputStream(file);

}else{

System.out.println("文件不存在,创建新的文件....");

file.createNewFile();

}

}

}

相关推荐
闲猫3 分钟前
go orm GORM
开发语言·后端·golang
427724004 分钟前
IDEA使用git不提示账号密码登录,而是输入token问题解决
java·git·intellij-idea
chengooooooo25 分钟前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
李长渊哦28 分钟前
常用的 JVM 参数:配置与优化指南
java·jvm
计算机小白一个28 分钟前
蓝桥杯 Java B 组之设计 LRU 缓存
java·算法·蓝桥杯
李白同学2 小时前
【C语言】结构体内存对齐问题
c语言·开发语言
黑子哥呢?3 小时前
安装Bash completion解决tab不能补全问题
开发语言·bash
青龙小码农3 小时前
yum报错:bash: /usr/bin/yum: /usr/bin/python: 坏的解释器:没有那个文件或目录
开发语言·python·bash·liunx
大数据追光猿3 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
南宫生3 小时前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode