03 JAVA IO
java.io包中定义了多个流类型来实现输入输出功能,以不同的角度进行分类:
按数据流的方向不同可以分为输入流和输出流
按处理数据单位不通可以分为字节流和字符流
按照功能不同可以分为节点流和处理流
所有流类型位于包java.io内都分别继承自一下四种抽象流类型
节点流可以从一个特定的数据源读写数据
处理流是“”连接“”在已存在的流之上,通过对数据的处理为程序提供更为强大的读写功能
InputStream
继承自InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8bit)
下图中深色为节点流、浅色为处理流
OutputStream
继承自OutputStream的流都是用于程序中输入数据,且数据的单位为字节(8bit)
下图中深色为节点流、浅色为处理流
Reader
继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符(16bit)
下图中深色为节点流、浅色为处理流
Writer
继承自Writer的流都是用于程序中输入数据,且数据的单位为字符(16bit)
下图中深色为节点流、浅色为处理流
几个程序小例子来阐明具体用法:
FileInputStream和FileOutputStream用法
FileInputStream和FileOutputStream是字节流,只能单个字节传递,而汉字是双字节的,所以不能识别汉字
import java.io.*; public class IOtest { public static void main(String[] args) { int b=0; FileInputStream in=null; FileOutputStream out=null; try { in=new FileInputStream("g:/1.txt"); out=new FileOutputStream("g:/2.txt"); while((b=in.read())!=-1)//in.read()不为-1说明还未访问完输入流 { out.write(b);//按照字节写入 } in.close(); out.close(); } catch (Exception e) { e.printStackTrace(); } } }
FileReader和FileWriter用法
FileReader和FileWriter是字符流,可以传递汉字
import java.io.FileReader; import java.io.FileWriter; public class Reader_writer { public static void main(String[] args) { int c=0; FileReader fr=null; FileWriter fw=null; try { fr=new FileReader("g:/1.txt"); fw=new FileWriter("g:/2.txt"); while((c=fr.read())!=-1) { fw.write(c); } fr.close(); fw.close(); } catch (Exception e) { } } }
BufferInputStream套接FileInputStream用法
import java.io.BufferedInputStream; import java.io.FileInputStream; public class BufferInputStream { public static void main(String[] args) { // TODO Auto-generated method stub try { FileInputStream fis=new FileInputStream("g:/1.txt"); BufferedInputStream bis=new BufferedInputStream(fis);//对象流 int c=0; System.out.println(bis.read()); System.out.println(bis.read()); bis.mark(0);//标记位置0 for(int i=0;i<10&&(c=bis.read())!=-1;i++) { System.out.println((char)c+" "); } bis.reset();//回到标记位置,即位置0 for(int i=0;i<10&&(c=bis.read())!=-1;i++) { System.out.println((char)c+" "); } bis.close(); } catch (Exception e) { // TODO: handle exception } } }
未完待续