IO流
IO流用来处理JVM内存和外部设备之间的数据传递,JAVA通过流(STREAM)完成数据传输
IO流的分类
- 数据传输的方向:输入流,输出流
- 流中传输的数据内容:
字节流(以字节为单位的01二进制数据),操作一切类型数据,但操作数据不方便;
字符流(字符数据);即文本数据,用文本编辑器打开还能认识。
IO流常用基类
字节流
字节输入流:InputStream类(抽象类)
字节输出流:OutputStream类(抽象类)
字符流
字符输入流:Reader(抽象类)
字符输出流:Writer(抽象类)
这四个类派生出的子类都以父类名作为后缀
OutputStream
构造方法
FileOutputStream(File file) 使用File对象表示目标文件
FileOutputStream(String name) 使用文件路径字符串表示目标问津
1.建立通道:流对象闯创建好,即通道建立好
OutputStream out1 = new FileOutputStream("a.txt")
-------------
File file = new File("a.txt");
OutputStream out2 = new FileOutputStream(file)
创建字节输出流时
1.JVM会首先到操作系统中找目标文件是否存在,若不存在,创建文件;若存在,
JVM会首先清空目标文件,从文件开头开始写入数据
2.创建FileOutputStream
3.创建数据传输通道
2.写入数据(写入数据后要关闭流)
public void write(int b)写入单个字节
public void write(byte[] b)写入整个字节数组
public void write (byte[] b,int off,int len)
将字节数据从偏移量off开始的len个字节写入
实现追加写入
FileOutputStream(File file,boolean appnd)
FileOutputStream(String name,boolean appnd)
若第二个参数为true,则追加写入
I/O流操作的异常处理
write异常 IOexception、FileNotFoundException
close异常IOException查看问题
TIPs
windows中,/r/n是换行符
linux或mac os中,/n是换行符
InputStream
构造方法
FileInputStream(File file)
FileInputStream(String name)
创建该类对象时,JVM找到不做任何处理,找不到抛出异常FileNoFoundException
读操作
int read(int b)读取一个字节,若末尾返回-1
int read(byte[] b)实际开发给1024的整数倍,返回实际读取的字节数
int read (byte[] b,int off,int len)从字节数组的第off个位置开始填充,
向后填充len个数据,返回实际读取的字节数据
Bufferstream
BufferedOutputStream(OutputStream out)创建一个新的缓冲输出流,已将数据写入指定的底层输出流。
BufferedInputStream(InputStream in)创建一个BufferedInputStream并保存其参数,即输入流in以便将来使用。
创建缓冲字节输入流
InputStream in = new FileInputStream("d:\\a.txt")
InputStream bis = new BufferedInputStream(in);
创建缓冲字节输出流
OutputStream out = new FileOutputStream("e:\\b.txt")
OutputStream bos = new BufferedOutputStream(out);
对于缓冲流而言,只需要关闭缓冲流即可,缓冲流会自动关闭底层字节流。
flush()刷新此输出流并强制写出所有缓冲的输出字节
注:缓冲流的close方法会调用一次flush再关闭流
关于利用缓冲流实现文件的追加写入
保证缓冲输出流包装的这个底层FileOutputStream对象,必须是通过一下方式创建FileOutputStream(String filePath,boolean append)
在创建FileOutputStream对象的第二个参数传递true。