Io流的继承结构
在java中 根据处理的数据单位不同 可以把流分为 字节流 和字符流
字节流:针对二进制的文件
字符流:针对文本文件
在结合对应类型的输入和输出方向 常用流有
File
字节流:针对二进制文件
InputStream
FileinputStream
BufferedinputStream
ObjectinputStream
OutputStream
FileOutputStream
BufferedOutputStream
ObjectOutputStream
字符流:针对文本文件
Reader
FileReader
BufferedReader
InputStreamReader
Writer
FileWriter
BufferedWriter
OutputStreamWriter
PrintWriter 一行行写出
字节流读取
字节流是由字节组成的,字符流是由字符组成的.
Java里字符由两个字节组成.字节流是基本流,主要用在处理二进制数据。
所以字节流是比较常用的,可以可以处理多种不同种类的文件,比如文本文档/音频/视频等等
FileInputStream子类
直接插到文件上,直接读取文件数据
创建对象
FileinputStream(File file)一直接传文件对象
通过打开一个到实际文件的连接来创建一个FileinputStream,该文件通过文件系统中的file对象file 指定FileInputStream(String pathname)--传路径
通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的路径名name指定
BufferedInputStream子类
BufferedInputStream 为另一个输入流添加一些功能,在创建BufferedInputStream时 会创建一个内部缓冲区数组(默认8k大小) 在读取或跳过流中的字节时 可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节
创建对象
BufferedInputStream(InputStream in)
创建一个BufferedIputStream 并保存其参数 即输入流in 以便将来使用
字符流读取
常用于处理纯文本数据,读写容易出现乱码的现象,在读写时,最好指定编码集为UTF-8
Reader抽象类
用于读取字符流的抽象类。
常用方法:
int read() 读取单个字符
int read(char[] cbuf) 将字符读入数组
abstract int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分
int read(CharBuffer target) 试图将字符读入指定的字符缓冲区
abstract void close() 关闭该流并释放与之关联的所有资源
FileReader子类
用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。
创建对象
FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader
FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader
BufferedReader子类
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
创建对象
BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流
字节流写出
OutputStream抽象类
此抽象类是表示输出字节流的所有类的超类.输出流接受输出字节并将这些字节发送到某个接收器.
常用方法:
Void close() 关闭此输出流并释放与此流相关的所有系统资源
Void flush() 刷新此输出流并强制写出所有缓冲的输出字节
Void write(byte[ ] b) 将b.length个字节从指定的byte数组写入此输出流
Void write(byte[ ] b,int off ,int len) 将指定byte数组中从偏移量off开始的len个字节写入输出流
Abstract void write(int b) 将指定的字节写入此输出流
FileOutputStream 子类
直接插在文件上,直接写出文件数据
构造方法(创建对象):
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的文件输出流
FileOutStream(File file)
创建一个向指定File对象表示的文件中写入数据的文件输出流
FileOutStream(File file,boolean append)—如果第二个参数为true,表示追加,不覆盖
创建一个向指定File对象表示的文件中写入数据的文件输出流,后面的参数是指是否覆盖原文件内容
BufferedOutputstream 子类
该类实现缓冲的输出流,通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必每次针对字节写出调用底层系统
构造方法(创建对象):
BufferedOutputStream(OutputStream out)
创建一个新的缓冲输出流,用以将数据写入指定的底层输出流
字符流写出
Writer 抽象类
写入字符流的抽象类
常用方法:
Abstract void close() 关闭此流,但要先刷新它
Void write(char[ ] cbuf) 写入字符数组
Void write(int c) 写入单个字符
Void write(String str) 写入字符串
Void write(String str,int off,int len) 写入字符串的某一部分
Abstract void write(char[] cbuf,int off,int len)写入字符数组的某一部分
FileWriter 子类
用来写入字符文件的便捷类,此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的.如果需要自己自定义这些值,可以先在FileOutputStream上构造一个OutputStreamWriter.
构造方法(创建对象):
FileWriter(String filename)
根据给定的文件名构造一个FileWriter对象
FileWriter(String filename,boolean append)
根据给定的文件名以及指示是否附加写入数据的boolean值来构造FileWriter
BufferedWriter子类
将文本写入字符输出流,缓冲各个字符,从而提供单个字符,数组和字符串的高效写入.可以指定缓冲区的大小,或者接受默认的大小,在大多数情况下,默认值就足够大了
构造方法(创建对象):
BufferedWriter(Writer out)
创建一个使用默认大小输出缓冲区的缓冲字符输出流
public static void main(String[] args) throws FileNotFoundException {
//创建文件流时可以使用追加模式//字节输出流,低级流,作用:连接文件,将字节写入文件
FileOutputStream fos=new FileOutputStream("pw2.txt",true);
//创建转换流时指定字符集//转换输出流,字符输出流 高级流 作用:1.衔接其他字符流与下面的字节流 2.将写出的字符转换为字节
OutputStreamWriter osw =new OutputStreamWriter(fos, StandardCharsets.UTF_8);
//缓冲输出流 作用:块写文本数据加速
BufferedWriter bw=new BufferedWriter(osw);
/**
* PrintWriter 提供的构造方法中如果第一个参数是一个流,那么就可以再传入
* 一个Boolean值的参数用于指定是否打开自动行刷新功能(默认是false不打开)
* 当该值为true时就打开了自动行刷新功能
* 每当我们调用println方法写出一行字符串后就会flush
*/
//字符输出流,高级流,1.按行写出字符串(println) 2.true:自动行刷新
PrintWriter pw=new PrintWriter(bw,true);
Scanner scan=new Scanner(System.in);
String len;
//equalsIgnoreCase 比较内容,忽略大小写,比较密码时禁用,比较验证码可以
//equals比较内容,不忽略大小写
while (!"exit".equals(len=scan.nextLine())){
pw.println(len);
}
System.out.println("写出完毕!");
pw.close();//关流