IO流
IO流的分类
根据数据流向:输入流和输出流
- 输入流:把数据从硬盘上读取到内存中
- 输出流:把数据从内存中写入到硬盘上
根据操作数据单位:字节流和字符流
- 字节流:以字节为单位读写(文本、音频、图片、视频等)
- 字符流:以字符为单位读写(主要用于文本)
字节流
- 字节输入流:InputStream
- 字节输出流:OutputStream
字节输入流:InputStream
该抽象类是输入字节流的基类,可以读取字节信息到内存中。
FileInputStream类
构造方法
-
FileInputStream(File file)
: 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。 -
FileInputStream(String name)
: 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
常用方法
返回值类型 | 方法名 | 含义 |
---|---|---|
void | close() | 关闭此输入流并释放与此流相关联的任何系统资源。 |
abstract int | read() | 从输入流中读取一个字节数据,并将读取到的数据返回;当读取到文件的末尾时返回-1 |
int | read(byte[] b) | 从输入流中读取一个字节数组的数据,返回实际读取到的有效字节数量;读取到文件的末尾返回-1 |
int | read(byte[] b, int off, int len) | 从输入流中读取len个字节,然后将读取到的字节从off位置开始放置到字节数组中,len不可以超出字节数组的长度;读取到文件的末尾返回-1 |
long | skip(long n) | 跳过输入流的n个字节 |
示例
package com.qfedu.demo;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
/**
* @Author pengyu
* @Date 2022/8/8 11:24
*/
public class Demo01 {
public static void main(String[] args) throws IOException {
//该路径下有个txt文本,内容是:我是博哥小迷弟
//创建一个file对象
File file = new File("D:/aaa/3.txt");
//创建一个fileInputStream对象输入流来操作file对象
FileInputStream fileInputStream = new FileInputStream(file);
//使用BufferedInputStream类,创建一个内部缓冲区数组
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
//定义一个字节数组来放读取的字节
byte[] b = new byte[1024];
int lenght;
//我们通过BufferedInputStream的父类来调用read(byte[] b) ,
// 从该输入流读取最多 byte.length个字节的数据到字节数组。
while ((lenght = bufferedInputStream.read(b)) != -1) {
System.out.println(new String(b,0,lenght));
}
//关闭流,释放资源,原则先进后关,后进先关
bufferedInputStream.close();
fileInputStream.close();
}
}
字节输出流:OutputStream
OutputStream是所有字节输出的顶层父类
FileOutputStream类
FileOutputStream是OutputStream中一个常用的子类,他可以关联一个文件,用于将数据写出到文件。
构造方法
FileOutputStream(File file)
:创建文件输出流以写入由指定的 File对象表示的文件。FileOutputStream(String name)
:创建文件输出流以指定的名称写入文件。
当一个路径的文件存在时,会覆盖原来的内容
常用方法
返回值类型 | 方法名 | 含义 |
---|---|---|
void | write(byte[] b) | 写出一个字节数组的数据 |
void | write(byte[] b, int off, int len) | 从字节数组中的off位置开始写出,写出len个字节 |
void | write(int b) | 一次写入一个字节数据 |
void | close() | 关闭此输出流并释放与流相关联的任何系统资源。 |
void | flush() | 刷新此输出流,并强制将任何缓冲的输出字节写入流 |
示例
package com.qfedu.demo;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @Author pengyu
* @Date 2022/8/8 19:31
*/
public class Demo02 {
public static void main(String[] args) throws IOException {
File file = new File("D:/aaa/4.txt");
if (!file.exists()) {
file.createNewFile();
}
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
String str = "台娃,不要在呱呱呱了。";
byte[] bytes = str.getBytes();
bos.write(bytes);
//刷新
bos.flush();
//关闭流
bos.close();
}
}
字符流(用于文本)
字符输入流:Reader
java.io.Reader
抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。
FileReader类
java.io.FileReader
类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。
构造方法
FileReader(File file)
: 创建一个新的 FileReader ,给定要读取的File对象。FileReader(String fileName)
: 创建一个新的 FileReader ,给定要读取的文件的名称。
常用方法
返回值 | 方法名 | 含义 |
---|---|---|
int | read() | 每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回-1 |
int | read(char buf[]) | 每次读取一个字符数组的数据读取到buf中,返回读取到的有效字符个数,读取到末尾时,返回-1 |
int | read(char cbuf[], int offset, int length) | 从输入流中读取len个字符,然后将读取到的字符从字符数组的off位置开始放置,len不可以超出字符数组的长度;读取到文件末尾返回-1 |
示例
package com.qfedu.demo;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
/**
* @Author pengyu
* @Date 2022/8/8 19:43
*/
public class Demo03 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(new File("D:/aaa/4.txt")));
char[] chars = new char[4 * 1024];
int length;
while ((length = br.read(chars)) != -1) {
System.out.println(new String(chars, 0, length));
}
br.close();
//控制台输出:台娃,不要在呱呱呱了。
}
}
字符输出流:Writer
java.io.Writer
抽象类是表示用于读取Writ字符流的所有类的超类,可以读取字符信息到内存中。
FileWriter类
java.io.FileWriter
类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。
构造方法
FileWriter(File file)
: 创建一个新的 FileWriter,给定要读取的File对象。FileWriter(String fileName)
: 创建一个新的 FileWriter,给定要读取的文件的名称。
常用方法
返回值 | 方法名 | 含义 |
---|---|---|
void | write(int c) | 写一个字符 |
void | write(char[] cbuf, int off, int len) | 写入字符数组的一部分。 |
void | write(String str, int off, int len) | 写一个字符串的一部分。 |
示例
package com.qfedu.demo;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
/**
* @Author pengyu
* @Date 2022/8/8 20:02
*/
public class Demo04 {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter(new File("D:/aaa/5.txt")));
String str = "啦啦啦啦啦,我是卖报的小行家。";
char[] chars = str.toCharArray();
bw.write(chars);
bw.close();
//该路径下自动生成5.txt文本,内容为啦啦啦啦啦,我是卖报的小行家。
}
}