概述:以应用程序为参照物,读取数据为输入流(Input),写数据为输出流(Output),大量输入输出数据简称 IO 流
原理:
读写的文件分类
IO流读取数据内容分类
随机读写文件:文件中存在一个游标,通过移动游标的方式,改变读写数据的位置
顺序读写文件:每次都从文件开始的位置开始读写
输入输出字节流:InputStream、OutputStream
API:
文件流:FileInputStream(文件输入流)、FileOutputStream(文件输出流)
特点:文件流是节点流,直接可以操作磁盘的文件
节点流概念:能够介质(文件、网络、控制台)直接相连的流
API:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 完成文件的拷贝
*/
public class FileStreamDemo {
public static void main(String[] args) throws IOException {
// 1.创建一个文件输入流
FileInputStream fis = new FileInputStream("test.txt");
// 2.创建一个文件输出流
FileOutputStream fos = new FileOutputStream("text.txt");
// 3.创建一个数组
byte[] data = new byte[1024];
while (true) {
// 4.读取数据
int len = fis.read(data);
// 7.判断读取的长度是否为 -1
if (len == -1){
System.out.println("文件拷贝成功");
break;
}
// 5.写数据
fos.write(data, 0, len);
}
// 6.关闭管道流
fis.close();
fos.close();
}
}
Byte 字节流:ByteArrayInputStream(比特数组输入流)、ByteArrayOutputStream(比特数组输出流)
特点:包含一个缓冲区,该缓冲区存储从流中读取的数据
API:
import java.io.*;
/**
* 文件拷贝
*/
public class ByteArrayStreamDemo {
public static void main(String[] args) throws IOException {
// 1.创建一个文件管道流
FileInputStream fis = new FileInputStream("E:\\software\\developSoftware\\Java\\JavaSE\\basic\\src\\test.txt");
// 2.创建另一个文件输出流
FileOutputStream fos = new FileOutputStream("E:\\software\\developSoftware\\Java\\JavaSE\\basic\\src\\123.txt");
// 3.创建数组管道流
ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
// 5.定义数组
byte[] data = new byte[1024];
while (true) {
// 4.读取数据
int len = fis.read(data);
// 7.跳出
if (len == -1) break;
// 6.写数据
bos.write(data, 0, len);
}
bos.writeTo(fos);
// 8.关闭管道
fis.close();
fos.close();
bos.close();
}
}
Data 字节流:DataInputStream(数据输入流)、DataOutputStream(数据输出流)
特点:读取数据就是 Java 的数据类型,属于处理流
import java.io.*;
public class DateStreamDemo {
public static void main(String[] args) throws IOException {
//1.创建输入管道流
DataInputStream dis = new DataInputStream(new FileInputStream("test.txt"));
//2.创建一个输出管道流
DataOutputStream dos = new DataOutputStream(new FileOutputStream("text.txt"));
//3.边读边写
byte[] data = new byte[1024];
while (true){
int len = dis.read(data);
if (len == -1) break;
dos.write(data, 0 ,len);
}
//4.关闭管道
dis.close();
dos.close();
}
}
缓冲字节流:BufferedInputStream(缓冲输入字节流)、BufferedOutputStream(缓冲输出字节流)
特点:
API:
import java.io.*;
public class BufferedStreamDemo {
public static void main(String[] args) throws IOException {
//1.创建一个输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("test.txt"));
//2.创建一个输出流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("text.java"));
//3.边读边写
byte[] data = new byte[1024];
while (true){
int len = bis.read();
if (len == -1) break;
bos.write(data, 0, len);
bos.flush(); //当缓冲区满了就会自动刷出
}
//4.关闭流
bis.close();
bos.close();
}
}
输入输出字符流:Reader(输入字符流)、Writer(输出字符流)
特点:
PAI:
FileReader(文件输入字符流)、FileWriter(文件输出字符流)
特点:读数据方式是字符、属于节点流
API:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderDemo {
public static void main(String[] args) throws IOException {
//获取文件路径
String path = FileReaderDemo.class.getResource("").getPath();
//1.创建文件输入字符流
FileReader reader = new FileReader(path + "test.txt");
//2.输出字符流
FileWriter writer = new FileWriter(path +"text.txt");
while (true){
//3.读取文件内容
int buf = reader.read();
if (buf == -1) break;
//将字符写入文件
writer.write(buf);
//情况缓冲区
writer.flush();
}
//关闭管道流
reader.close();
writer.close();
}
}