1,Java提供了两个超类(抽象类)
java.io.inputStream(节点流)
java.io.outputStream(输出流)
用于读写文件
2, FileInputStream与FileOutputStream
FileInputStream是InputStream的子类,是字节流,作用是从指定的文档中读取资料至目的地。
FileOutputStream是outputStream的子类,是字节流,作用是从来源地写入指定的档案中读取资料至指定的档案。
(1)FileInputStream(读取文件)
public static void main(String[] args) {
try (InputStream in = new FileInputStream("D:\\games\\A新建文本文档.txt")) {
//提高效率
//批量读取(缓存)
//以一次128个字节读取
byte[] buff = new byte[128];
int len = -1;
while((len = in.read(buff)) != -1) {
System.out.printf("本次读取到的%d字节数:%s\n",len,Arrays.toString(buff));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
(2)FileOutputStream(写入文件)
两种构造方法:
//方式一:使用字符串类型的文件名创建一个输出流对象
OutputStream f = new FileOutputStream("C://book01");
//方式二:使用一个文件对象来创建一个输出流来写文件
File f = new File("C://book01");
OutputStream f = new FileOutputStream(f);
使用文件输出流写文件实例(记得用close关闭):
//将“生日快乐,天天开心”写入“C://text//book01”的文件中
public static void main(String[] args) {
byte[] a ="生日快乐".getBytes();
byte[] b ="天天开心".getBytes();
try (FileOutputStream out = new FileOutputStream("C://text//book01")) {
out.write(a);
out.write(b,0,b.length);
out.close();
} catch (IOException e) {
System.out.println("Error"+e);
}
}
3, BufferedInputStream与BufferedOutputStream
(1)BufferedInputStream
BufferedInputStream是缓存字节输入流,是一个高级流,与其他低级流配合使用。
构造方法:
BufferedInputStream in = new BufferedInputStream(new FileInputStream(“c://text”))
读取文件实例:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
public class Test01 {
public static void main(String[] args) {
//指定要读取的文件路径
try (BufferedInputStream in = new BufferedInputStream(
new FileInputStream("c://text"))) {
//用来储存每个读到的文件数组,每次读到的字节长度为128
byte[] buff = new byte[128];
int len;
while((len = in.read(buff)) != -1) {
System.out.println(Arrays.toString(buff));
}
} catch (IOException e) {
System.out.println("文件读取错误" +e);
}
}
}
(2)BufferedOutputStream
BufferedOutputStream是缓存字节输入流,是一个高级流,包括了一个8192个字节的缓存区。如果需要自己分配缓存区,可以构建一个构造函数。
//将"宝剑锋从磨砺出,梅花香自苦寒来"写入c盘目录下的buffered.txt文件中
public static void main(String[] args) throws IOException {
try (FileOutputStream fos = new FileOutputStream("C:\\test\\buffered.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos)) {
bos.write("宝剑锋从磨砺出".getBytes());
bos.flush();
bos.write("梅花香自苦寒来".getBytes());
}
}
3,使用建议(BufferedOutputStream最佳)
(关于FileInputStream与BufferedOutputStream)
(1)FileInputStream文件输出流,无缓冲区,write一次,就要往文件里写入一次数据,效率低。
(2)BufferedOutputStream缓存输出流,默认缓存区的大小为8192个字节,可通过构造函数定义。write方法将数据写入缓存区。flush方法将缓存区的数据写入文件,高效。