概述
以字节为单位进行读写操作的流
字节输入流:InputStream
方法:
abstract int read()
从输入流中读取数据的下一个字节。
int read(byte[] b)
从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
int read(byte[] b, int off, int len)
将输入流中最多 len 个数据字节读入 byte 数组。
void close()
关闭此输入流并释放与该流关联的所有系统资源。
子类FileInputStream
-
FileInputStream
从文件系统中的某个文件中获得输入字节。【读取字节数据】 -
FileInputStream
用于读取诸如图像数据之类的原始字节流。-
要读取字符流,请考虑使用
FileReader
-
创建对象和读取数据
//导包
import java.io.FileInputStream;
//编译异常,暂用该包抛出异常
import java.io.IOException;
//创建字节输入流,目标指向相对路径下的hello.txt
FileInputStream fileInputStream = new FileInputStream("hello.txt");
//读取数据
fileInputStream.read();//每次读取一个字节的数据
//创建数组b 长度为10
byte[] b = new byte[10];
//将读数据放入数组b中,每次读取的数量是10,文件中剩余内容不足10时全部读取
int len = fileInputStream.read(b);
//关闭输入流
fileInputStream.close;
字节输出流:OutputStream
-
文件输出流是用于将数据写入
File
的输出流。 -
FileOutputStream
用于写入诸如图像数据之类的原始字节的流。-
要写入字符流,请考虑使用 FileWriter
-
创建对象和写入数据
/**
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
FileOutputStream(String name, boolean append)
创建一个向具有指定 name 的文件中写入数据的输出文件流。
void write(int b)
将指定字节写入此文件输出流。
void write(byte[] b)
将 b.length 个字节从指定 byte 数组写入此文件输出流中。
void write(byte[] b, int off, int len)
将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
*/
// 创建字节输出流,准备向world.txt中书写数据,如果添加了布尔值true则表示追加新的内容
FileOutputStream fileOutputStream = new FileOutputStream("world.txt",ture)
//每次写入的字节数
fileOutputStream.write(10);
//创建需要写入到文档中的数据
byte [] b = {97,98,98,99,100};
//从数组b的第0位开始的2个字节文件进行输入
fileOutputStream.write(b, 0, 2);
//关闭字节输入流
fileOutputStream.close();
文件复制
在学习了文件的输入输出后,可以在java程序中完成将目标文件复制到指定地址
例:将某个文件复制到桌面
/**
* 复制相对路径下的某一个文件到桌面
* 1、创建流对象
* 输入流、输出流
* 2、批量读取效率较高,创建字节数组,记录每一次读取内容的数量
* 3、循环读写数据
* 4、关闭流
*/
//记录当前开始的时间以计算复制文件运行的时间
long startTime = System.currentTimeMillis();
//创建输入流输出流对象
//目标文件是相对路径下的world.txt
FileInputStream fileInputStream = new FileInputStream("world.txt");
//目标位置是桌面
FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\24875\\Desktop\\world.txt");
//假设world.txt没有内容
int len = -1;
//定义每次读写进入数组的字节的长度
byte[] b = new byte[1024*32];
//循环读写 每次将一个字节的数据放入数组b中
while ((len = fileInputStream.read(b)) != -1) {
//写入读取的数据
fileOutputStream.write(b, 0, len);
}
//关闭输入输出流
fileInputStream.close();
fileOutputStream.close();
//展示该过程所消耗的时间
System.out.println(System.currentTimeMillis() - startTime);