1、IO字节流
(1)input输入:把硬盘中的数据,读取到内存中使用;
output输出:把内存中的数据存储到硬盘中;
(2)OutputStream,是所有字节输出流类的超类,定义了一些子类共性的成员方法:
1》public void close();关闭此输出流,并释放与此流相关联的系统资源;
2》public void flush();刷新此输出流,并强制任何缓冲的输出字节被写出;
3》public void write(byte[] b);将b.length字节从指定的字节数组写入此输出流;
4》public void write(byte[] b, int off, int len);从指定的字节数组写入len字节,从偏移量off开始(即off是开始索引);
5》public abstract void write(int b);把一个字节的内容写入此输出流;
(3)文件字节输出流FileOutputStream:把内存中的数据写入到硬盘中;
1》构造方法:1>FileOutputStream(String name);创建一个向指定名称的文件写入数据的输出流;
2>FileOutputStream(File file);创建一个向指定File对象表示的文件写入数据的输出流;
构造方法的作用:1>创建一个FileOutputStream对象;
2>根据构造方法中传递的文件路径,创建一个空文件;
3>把FileOutputStream对象指向创建好的文件;
(4)字节输出流的使用步骤:1》创建一个FileOutputStream对象,构造方法中传递写入数据的目的地;
2》调用FileOutputStream对象中的方法write,把数据写入到文件中;
3》释放资源(流的使用会占用一定的内存,使用完毕把内存清空,提高效率);
(5)直接写入字符的方法,使用String类中的方法getBytes()把字符串转换为字节数组,再调用字节输出流的write方法写入;
(6)字节输出流的续写和换行:1》续写:使用含有两个参数的构造方法FileOutputStream(String name, boolean append);或FileOutputStream(File file, boolean append);
boolean append是续写的开关,为true时,创建对象不会覆盖原文件,继续在文件的末尾追加写数据,为false时,创建一个新文件,覆盖原文件;
2》换行:可以写换行符号,windows写\r\n,linux写/n;
(7)InputStream字节输入流:抽象类,所有字节输入流的超类,所有子类共性的方法:
1》int read();从输入流中读取数据的下一个字节(读取文件中的一个字节并返回,读取到文件末尾返回-1;读取一个字节后会将指针指向下一个字节);
2》int read(byte[] b);从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中(返回值是读取的有效字节的个数,读取到文件末尾返回-1;
byte数组的作用:是缓冲作用,存储读取到的多个字节,数组的长度一般定义1024或1024的整数倍);
3》void close();关闭此输入流,并释放与该流相关联的系统资源;
(8)FileInputStream文件字节输入流:将硬盘文件在的数据,读取到内存中使用;
构造方法:1》FileInputStream(String name);
2》FileInputStream(File file);
构造方法的作用:1>会创建一个FileInputStream对象;
2>把FileInputStream对象指向构造函数中要读取的文件;
(9)字节输入流的使用步骤:1》创建FileInputStream对象,构造方法中绑定要读取的数据源;
2》使用FileInputStream对象中的方法read,读取文件;
3》释放资源;
(10)读取的字节数组转换成字符串的方法:
使用String类的构造方法:1》new String(byte[] b);把字节数组转换为字符串;
2》new String(byte[] b, int offset, int length);把字节数组的一部分转换为字符串,offset为开始索引,length为转换的字节个数,
读取多个字节,转换成字符串时,使用这个方法,因为最后一次读取时,读取的有效字节个数可能小于byte数组的长度;
(11)文件复制的原理:一读一写;
步骤:1》创建文件字节输入流FileInputStream,指定数据源;
2》创建文件字节输入流FileOutputStream,指定数据目的地;
3》使用字节输入流的方法read读取文件;
4》使用字节输出流的方法write,把读取到的文件写入到目的文件中;
5》释放资源(先关闭输出流,再关闭输入流);
(12)使用字节流读取中文的问题,1个中文字符会占用多个字节,GBK占2个字节,UTF-8占3个字节;会产生乱码,解决的办法:使用字符输入流;