Java_IO流
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
IO流
1,流的分类
按照流的流向划分:
输入流:只能从中读取数据,而不能向其写数据。输入流基类,InputStream和Reader。
输出流:只能向其写入数据,而不能从中读取数据。输出流基类,OutputStream和Writer。
按照操作数据单元划分:
字节流:操作最小数据单元是8位的字节。字节流基类,InputStream和OutputStream。
字符流:操作最小数据单元是16位字节。字符流基类,Reader和Writer。
2,Java IO体系
2.1 IO体系图
2.2 IO体系分类图
3,IO流抽象基类
3.1,输入流的抽象基类:InputStream和Reader
InputStream和Reader是所有输入流的基类,它们都是抽象类,本身不能创建实例来执行输入,但它们是所有输入流的模板,所有输入流都使用它们提供的方法。
在InputStream里包含如下三个方法:
》》int read():从输入流中读取单个字节,返回所读取的字节数据(字节数据可直接转换为int类型)。
》》int read(byte[] b):从输入流中读取最多b.length个字节的数据,并将其存储在字节数组b 中,赶回实际读取的字节数。
》》int read(byte[] b,int off,int len):从输入流中读取最多len字节的数据,并将其从off位置开始存储在数组b中,返回实际读取的字节数。
在Reader里包含如下三个方法:
》》int read():从输入流中读取单个字符,返回所读取的字符数据(字符数据可直接转换为int类型)。
》》int read(char[] cbuf):从输入流中读取最多cbuf.length个字符的数据,并将其存储在字符数组cbuf中,赶回实际读取的字符数。
》》int read(char[] cbuf,int off,int len):从输入流中读取最多len字符的数据,并将其从off位置开始存储在数组cbuf中,返回实际读取的字符数。
3.2,输出流的抽象基类:OutputStream和Writer
OutputStream和Writer和前面的输入流相似,两个流都提供了如下三个方法:
》》void write(int c):将指定的字节/字符输出到输出流中,其中c代表字节或者字符。
》》void write(byte[]/char[] buf):将字节数组/字符数组中的数据输出到指定的输出流中。》》void write(byte[]/char[] buf,int off,int len):将字节数组/字符数组中从off位置开始,长度为len的字节/字符输出到指定的输出流中。
因为字符流直接以字符作为操作单位,所以Writer可以用字符串来代替字符数组,即以String对象作为参数。Writer里还包含如下两个方法:
》》void write(String str):将字符串str里包含的字符输出到指定的输出流中。
》》void write(String str,int off,int len):将字符串str从off位置开始,长度为len的字符输出到指定输出流中。
4,IO流程序异常处理的标准方式
import java.io.*;
class FileWriterDemo2
{
public static void main(String[] args)
{
FileWriter fw = null;
try
{
fw = new FileWriter("c:\\demo.txt");
fw.write("abcde");
}
catch (IOException e)
{
//异常处理方式
System.out.println(e.toString());
}
finally
{
try
{
if(fw!=null)
fw.close();
}
catch (IOException e)
{
//异常处理方式
System.out.println(e.toString());
}
}
}
}
5,流与流之间相对应的关系
图5.1 字节输入流与输出流的对应关系
图5.2,字符输入流与输出流的对应关系
6,实现IO的子类
6.1,字符流
1,FileWriter
构造方法:
FileWriter(String fileName):根据给定的文件名构造一个FileWriter对象。
FileWriter(String fileName, boolean append):根据给定的文件名以及指示是否附加写入数据的boolean值来构造FileWriter对象。
常用方法:
void close():关闭此流,但要先刷新它。
void flush():刷新该流的缓冲。
void write(char[] cbuf) :写入字符数组。
void write(char[] cbuf, int off, int len) :写入字符数组的某一部分。
void write(int c) :写入单个字符。
void write(String str) :写入字符串。
void write(String str, int off, int len) :写入字符串的某一部分。
2,FileReader
构造方法:
FileReader(String fileName):在给定从中读取数据的文件名的情况下创建一个新FileReader。常用方法:
void close() :关闭该流并释放与之关联的所有资源。
int read() :读取单个字符。
int read(char[] cbuf) :将字符读入数组。
int read(char[] cbuf, int off, int len) :将字符读入数组的某一部分。
3,BufferedWriter
构造方法:
BufferedWriter(Writer out):创建一个使用默认大小输出缓冲区的缓冲字符输出流。
常用方法:
void close():关闭此流,但要先刷新它。
void flush():刷新该流的缓冲。
void newLine():写入一个行分隔符,该方法具有跨平台性。
void write(char[] cbuf) :写入字符数组。
void write(char[] cbuf, int off, int len):写入字符数组的某一部分。
void write(int c):写入单个字符。
void write(String str) :写入字符串。
void write(String s, int off, int len):写入字符串的某一部分。
4,BufferedReader
构造方法:
BufferedReader(Reader in):创建一个使用默认大小输入缓冲区的缓冲字符输入流。
常用方法:
void close():关闭该流并释放与之关联的所有资源。
int read():读取单个字符。