Java IO流小结

Java I/O流

一、流的分类

  • 按照操作数据单位不同,分为:字节流(8 bit),字符流(16 bit)
  • 按照数据的流向不同,分为:输入流 输出流
抽象基类字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter

由这四个类(抽象类)派生出来的子类名称都是以其父类名作为子类名的后缀

IO流体系

分类字节输入流字节输出流字符输入流字符输出流
抽象基类InputStreamOutputStreamReaderWriter
访问文件FileInputStreamFileOutputStreamFileReaderFileWriter
访问数组ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter
访问管道PipedInputStreamPipedOutStreamPipedReaderPipedWriter
访问字符串StringReaderStringWriter
缓冲流BufferedInputStreamBufferedOutputStreamBufferdReadierBufferWriter
转换流InputStreamReaderOutputStreamWriter
对象流ObjectInputStreamObjectOutput Stream
FilterInputStreamFilterOutputStreamFilterReaderFilterWriter
打印流PrintStreamPrintWriter
推回输入流PushbackInputStreamPushbackReader
特殊流DataInputStreamDataOutputStream

字符流与字节流区别

  • 字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。
  • 字节流在操作的时候不会用到缓冲区,而字符流在操作的时候会用到缓冲区
  • 字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串

二、File操作

2.1 FileReader

构造方法
FileReader(File file)				//根据给定的 File 对象构造一个FileReader 对象。
FileReader(FileDescriptor fd) 		//根据给定的文件名构造一个 FileReader对象。
FileReader(String fileName)			//根据给定的 FileDescriptor构造一个FileReader对象
使用
int read() throws IOException	//读取单个字符,返回一个int型变量代表读取到的字符 返回值为-1相当于读完
int read(char [] c, int offset, int len)//读取字符到c数组,返回读取到字符的个数    
void close() throw IOException	//关闭流

2.2 FileWriter

构造方法
FileWriter(String fileName) throws IOException	//根据给定的文件名构造一个 FileWriter 对象。
FileWriter(String fileName,boolean append) throws IOException//根据给定的文件名以及指示是否附加写入数据的boolean 值来构造 FileWriter 对象。append : 一个 boolean 值,如果为 true,则将数据写入文件末尾处,而不是写入文件开始处。
FileWriter(File file) throws IOException	//根据给定的 File 对象构造一个 FileWriter 对象。
常用方法
void write(int c) 		//写入一个字符 
void write(String str)//写入字符串
void write(String str, int off, int len) 	//写一个字符串的一部分。 
void write(char[] cbuf, int off, int len) 	//写入字符数组的一部分。 
void flush() throws IOException //刷新流。 
void close() throws IOException		//关闭流之前,要先刷新

2.3 FileInputStream

构造方法
FileInputStream(File file) throws FileNotFoundException //根据给定的 File 对象构造一个FileInputStream 对象。
FileInputStream(String name) throws FileNotFoundException //根据给定的文件名构造一个   FileInputStream 对象。
FileInputStream(FileDescriptor fd)	//根据给定的 FileDescriptor构造一个FileInputStream对象
常用方法
int read() throws IOException	//将读入的byte型8位二进制转化为10进制int型返回,-1表示读完
int read(byte[] b) throws IOException//从输入流中读取b.length个字节到字节数组中,返回读入缓冲区的总字节数 -1表示读完
int read(byte[] b,int off,int len) throws IOException  //从输入流中读取最多len个字节到字节数组中,从数组的off位置开始存储字节  
void close() throws IOException	//关闭流

2.4 FileOutputStream

构造方法
FileOutputStream(File file) throws FileNotFoundException	//根据给定的 File 对象构造一个FileOutputStream 对象。
FileOutputStream(File file,boolean append) throws FileNotFoundException{}	//如果第二个参数为true,则字节将写入文件的末尾而不是开头,第二个参数为false时,覆盖原内容
FileOutputStream(String name) throws FileNotFoundException{}//据给定的文件名对象构造一个FileOutputStream 对象。
FileOutputStream(String name,boolean append) throws FileNotFoundException   
常用方法
void write(int b) throws IOException	//将指定的一个字节写入文件的输出流中
void write(byte[] b) throws IOException	//将指定字节数组中的b.length个字节写入到输出流中
void write(byte[] b,int off,int len) throws IOException	//将从偏移量off开始的指定字节数组中的len个字节写入输出流中
void close() throws IOException			//关闭流

常用String类下的getBytes方法使字符串转化为byte型数组

三、缓冲流

Buffered与FIle在文件操作上的区别

  • BufferedReader和BufferedWriter在内存中会自带一个8kb的字节缓冲区
  • BufferedReader提供了readLine()方法
  • BufferedReader类会尽量提取比当前操作所需的更多字节,以应该更多情况下的效率提升

3.1 BufferedReader

构造方法
BufferedReader br = new BufferedReader(new FileReader("FileName"));//首先创建FileReader对象,将FileReader传递给BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("FileName"), "utf-8"));//利用包装的InputStream类创建BufferedReader对象
常用方法
int read() throws IOException;	//读取1个或多个字节,返回一个字符,当读取到文件末尾时,返回-1
int read(byte[] b,int off,int len) throws IOException  //从输入流中读取最多len个字节到字节数组中,从数组的off位置开始存储字节  
String readline()		//读取一行的数据,存储在字符串中返回,不包括换行符
void close()			//关闭流
乱码问题

包装FileReader的BufferedReader在读取文件时候如果文件的编码和项目的编码不一样的时候,会出现乱码

解决方法:

使用包装InputStreamReader的BufferedReader读取文件

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("FileName"), "utf-8"));
//BufferedReader只负责读到它的内部缓冲区中,而解码的工作是InputStreamReader完成的。

3.2 BufferedWriter

构造方法
BufferedWriter bw = new BufferedWriter(new FileWriter("FileName"));//首先创建FileWriter对象,将FileWriter传递给BufferedWriter
常用方法
void write(int c) 		//写入单个字符。
void write(char[] c, int off, int len) //从off开始写入字符数组的长为len的某一部分
void write(String s, int off, int len) //从off开始写入字符串长为len的某一部分。
void newLine() 			//写入一个行分隔符。
void flush() throws IOException			//刷新该流的缓冲。
void close() throws IOException			//关闭流之前,要先刷新

3.3 BufferedInputStream

构造方法
 BufferedInputStream input = new BufferedInputStream(new FileInputStream("FileName"));//利用包装的InputStream类创建BufferedInputStrea对象
常用方法
 int read() throws IOException 			 // 读取下一个字节
 int read( byte [] b, int off, int len) throws IOException   // 将缓冲区中的数据写入到字节数组b中。off是字节数组b的起始位置,len是写入长度
 void mark(int readlimit)				//标记“缓冲区”中当前位置。 readlimit为mark后最多可读取的字节数
 void reset() throws IOException 		// 将“缓冲区”中当前位置重置到mark()所标记的位置
 void close() throws IOException		//关闭流

3.4 BufferedOutputStream

构造方法
BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream("FileName"));//利用包装的OutputStream类创建BufferedOutputStrea对象
常用方法
void write(int b)throws IOException		//一次写一个字节
void write(byte[] b,int off,int len) throws IOException    //从字节数组off开始写入长为len的字节串
void flush() throws IOException			//刷新缓冲
void close() throws IOException			//关闭流之前,要先刷新
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值