IO流:
概述:
IO流用来处理设备之间的数据传输,上传文件和下载文件;
java对数据的操作是通过流的方式进行;
java用于操作流的对象都在IO包中;
分类:
根据数据流向:
输入流 读入数据;
输出流 写出数据;
按照数据类型:
字节流
字符流;
使用:
如果数据所在的文件通过windows自带的记事本打开并能读懂里面的内容,就用字符流,其他用字节流(诸如图片,视频等);
如果不清楚,就用字节流;
IO流常用基类:
字节流的抽象基类:
InputStream,OutputStream;
字符流的抽象基类:
Reader,Writer;
注:
由这四个类派生出的子类名都是以父类名作为子类名的后缀;
如:
InputStream的子类FileInputStream;
Reader的子类FileReader;
FileOutputStream:
构造方法:
1.FileOutputStream(File file);
2.FileOutputStream(String File);
3.FileOutputStream(File file,boolean append):如果第二个参数为true,则将字节写入末尾处,而不是写入文件开始处:
创建字节流输出对象执行的操作:
1.调用系统功能去创建文件;
2.创建输出流对象;
3.把输出流对象指向文件;
写入数据:
1.public void write(int b):写一个字节;
2.public void write(byte[] b):写一个字节数组;
3.public void write(byte[] b,int off,int len):写一个字节数组的一部分;
异常处理:
重点:close()放入finally中;
在对象调用close()方法前判断对象是否为null;
为什么一定要close():
1.让流对象变成垃圾,这样就可以被垃圾回收器回收;
2.通知系统去释放跟该文件相关的资源;
换行符:
windows:\r\n;
linux:\n;
mac:\r;
高级记事本,可以识别任意换行符号;
FileInputStream:
字节输入流创建执行的步骤:
1.创建字节输入流对象;
2.调用read()方法读取数据,并把数据显示在控制台;
3.释放资源;
读取数据:
1.public int read():一次读取一个字节;
2.oublic int read(byte[] b):一次读取一个字节数组;
循环读取并写入:
方式1(逐字节读取):
FileInputStream is=new FileInputSream("java.txt");
FileOutputStream os=new FileOutputStream("javaWeb.txt");
int by=0;
while((by=is.read)!=-1){
os.write(by);
}
方式2(字节数组读取):
对象就调用方式1的;
int len=0;
byte[] bys=new byte[1024]
while((len=is.read)!=-1){
os.write(bys,0,len);
}
计算机如何识别什么时候该把两个字节转换为一个中文:
在计算机中中文的存储分为两个字节;
第一个字节肯定是负数;
第二个字节常见的是负数,可能有正数,但不影响;
字节缓冲流:
字节缓冲输出流:
BufferedOutputstream
构造方法:
1.BufferedOutputstream(OutputStream out);
2.BufferedOutputStream(OutputStream out,size):指定缓冲区大小;
字节缓冲输入流构造方法和这个差不多;
为什么传递输入/输出流对象:
因为字节缓冲流仅仅提供缓冲区,为高效设计,真正的读写还得靠基本流对象实现;
字符流:
字节流操作中文不是很方便,所以,java就提供了转换流;
字符流=字节流+编码表;
编码表:
由字符及其对应的数值组成的一张表;
常见编码表:
ASCII字符集:美国标准信息交换表;
Unicode表:国际标准码;
ISO-8859-1:拉丁码表,8为一数据;
GB2312/GBK/GB18030:中国的中文编码表;
BIG 5:台湾,香港地区的繁体字编码方案;
UTF-8:最多用3字节表示一字符;
编码与解码:
解码:
Public String(byte[] bys,String charsetName):通过指定的字符集解码字节数组;
编码:
byte[] getBytes(String charsetName):使用指定的字符集把字符串编码为字节数组;
构造方法:
OutputStreamWriter(OutputStream out):字符流,把字节流转换为字符流;
可简写为:FileWriter(String pathname);
OutputStreamWriter(OutputStream out,String charsetName):根据指定编码把字节流转换为字符流;
字符输入流和这个差不多;
写数据(OutputStreamWriter):
1.public void write(int i):写一个字符;
2.public void write(char[] cbuf):写一个字符数组;
3.public void write(char[] cbuf,int off,int len):写一个字符数组的一部分;
4.public void write(String str):写一个字符串;
5.public void write(String str,int off,int len):写一个字符串的一部分;
读数据(InputStreamReader):
1.public int read():只读一个字符;
2.public int read(char[] cbuf):一次读一个字符数组;
字符缓冲流:
字符流为了高效读写,也提供了对应的字符缓冲流;
BufferedWriter;
BufferedReader;
构造方法:
BufferedWriter bs=new BufferedWriter(new OutputStreamWriter osw(new FileOutputStream(String pathname)));
简化版:BufferedWriter bs=new BufferedWriter(FileWriter(String pathname));
字符输入流同理;
特殊功能:
BufferedWriter:
void newLine();
BufferedReader:
String readLine();