根据数据流向:输入流和输出流
- 输入流:把数据从硬盘上读取到内存中
- 输出流:把数据从内存中写入到硬盘上
根据操作数据单位:字节流和字符流
- 字节流:以字节为单位读写(文本、音频、图片、视频等)
- 字符流:以字符为单位读写(主要用于文本)
- 字节输入流:InputStream
- 字节输出流:OutputStream
该抽象类是输入字节流的基类,可以读取字节信息到内存中。
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; 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; 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; 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.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。
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; 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文本,内容为啦啦啦啦啦,我是卖报的小行家。 } }