IO基础
什么是IO?
**流:**在 Java中所有数据都是使用流读写的。流是一组有顺序的,有起点和终点的字节集合,是对数据传 输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象 为各种类,方便更直观的进行数据操作。
I0流是有起点与终止的有序的字节序列
程序与外部进行数据交换可以使用I0流,主要是读写文件相关的流类.这些流类在java.io包中,可以分为:
**输入/输出流:**是以当前程序为中心,程序从外面读数据是输入流,程序把数据保存到外面是输出流。
字节流/字符流:如果是以字节为单位处理流中的数据就是字节流,如果是以字符为单位处理流中的数据就是字符流。
**节点流与处理流:**如果直接操作数据源就是节点流;处理流不直接操作数据源,是对其他流的包装。
在java.io包中字节流都是以Stream单词结尾,字符流以Reader/Writer结尾
字节流常用类的继承关系
字节输入输出流( FileInputStream 和 FileOutputStream)
FileInputStream 从文件系统中的某个文件中获得输入字节。
FileOutputStream 用于读取诸如图像数据之类的原始字节流。
代码如下:
读aaa.txt的文件内容写入abc.txt文件中
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("C:\\my_java\\aaa.txt");
FileOutputStream fos = new FileOutputStream("C:\\my_java\\abc.txt");
int len = 0;
byte[] buff = new byte[1024];
while ((len = fis.read(buff)) != -1) {
fos.write(buff, 0, len);
}
fis.close();
fos.close();
}
}
字节缓冲流 BufferedInputStream
程序不直接从文件中读取数据而是从BufferedInputstream的缓冲区中读取数据
程序是数据写到BufferedOutputStream的缓冲区中,该缓冲区中的数据在满足以下条件时才会写到文件中
缓冲区满
调用flush()清空缓冲区
调用close() 关闭缓冲流流
BufferedInputStream 和 BufferedOutputStream 实现文件拷贝代码如下:
将aaa.txt文件拷贝到src下
import java.io.*;
public class TestBufferStreamCopy {
public static void main(String[] args) throws IOException {
File file = new File("aaa.txt");
if (!file.isFile()) {
return;
}
BufferedInputStream bfis = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bfos = new BufferedOutputStream(new FileOutputStream("src\\" + file.getName()));//copy到src目录下
byte bytes[] = new byte[1024];
int temp = 0;
//边读边写
while ((temp = bfis.read(bytes)) != -1) {//读
bfos.write(bytes, 0, temp); //写
}
bfos.flush();
bfos.close();
bfis.close();
System.out.println("copy成功!");
}
}