输入流与输出流

来源:互联网 发布:管家婆数据库安装 编辑:程序博客网 时间:2024/05/24 05:36

首先明确下输入与输出的含义:

输入:将硬盘上的资料输入内存显示在控制台

输出:将内存中(程序)的资料输出到硬盘上

Java的 I/O流提供大量的流类,其中有四个重要的抽象类:InputStream、OutputStream、Reader、Writer

InputStream和Reader类提供了读取数据的read()方法;OutputStream和Writer提供了写入数据的write()方法

这张图是涵盖了IO流常用的类下面一一介绍

1.FileOutputStream与FileInputStream

构造方法有:FileOutputStream(Stirng name) FileOutputStream(File file)

FileInputStream(String name)FileInputStream(File file)

例:用字节输出流往当前目录生成的a.txt文件里输入字符串helloworld

File file = new File("a.txt");FileOutputStream fos = new FileOutputStream(file); //或者new FileOutputStream("a.dat")String str = "helloworld";fos.write(str.getBytes());      //字符串转化成字节数组再调用write(byte[])方法一次性写入fos.close();//用完记得关闭System.out.println("输出成功");
注意:若new FileOutputStream(file,true);参数列表中有true则在写入时不会覆盖原有内容
例:用字节输入流读取当前目录下的a.txt 文件中的字符串输出的控制台
  File file = new File("a.txt");  FileInputStream  fis = new FileInputStream(file);  int d =-1;  while((d=fis.read())!=-1){       //挨个字节读取,直到返回-1表示读到末尾  System.out.print((char)d);  }  fis.close();
用字节数组输入流读取当前目录下的a.txt文件中的字符串输出到控制台
 File file = new File("a.txt");  FileInputStream  fis = new FileInputStream(file);  byte[]b = new byte[(int) file.length()];  int d =0;   while((d=fis.read(b))!=-1){ //若此处为fis.read(b,0,3)则表示每次读取最大3个字节    System.out.println(new String(b));   }   fis.close();
2.BufferedOutputStream与BufferedInputStream

字节缓冲流是加载 在节流上的 使用时必须往其构造器中传一个字节流对象

例:用字节缓冲流方式向当前目录下的a.txt文件写入helloworld

FileOutputStream fos = new FileOutputStream("a.txt");BufferedOutputStream bos = new BufferedOutputStream(fos);//将缓冲器加在输入流上String str = "helloworld";bos.write(str.getBytes());bos.close();//相对fos来说bos是高级流,结束时只需关闭高级流System.out.println("输出成功");
例:用字节缓冲流方式读取当前目录下a.txt文件的内容并打印
 File file = new File("a.txt");  FileInputStream  fis = new FileInputStream(file);  BufferedInputStream bis = new BufferedInputStream(fis);  int d =0;   while((d=bis.read())!=-1){   System.out.print((char)d);   }   bis.close();
字节数组读取方式不再演示同上。

注意:缓冲流在读取和输出时是在将缓冲区存满后再执行输入或输出操作。

3.ObjectOutputStream 与 ObjectInputStream

要进行序列化则该类必须实现接口Serializable

例:将员工类Emp 的一个对象序列化到文件emp.obj中

 FileOutputStream fos = new FileOutputStream("emp.obj");        ObjectOutputStream oos = new ObjectOutputStream(fos);                Emp emp = new Emp("张三",15,"男",4000);        oos.writeObject(emp);        System.out.println("序列化完毕");        oos.close();
例:将emp.boj中的Emp对象进行反序列化
 FileInputStream fis = new FileInputStream("emp.obj");        ObjectInputStream ois = new ObjectInputStream(fis);        Emp emp = (Emp)ois.readObject();//读出时要进行强转        System.out.println("反序列化完毕");        System.out.println(emp);        ois.close();
注意:对象流和缓冲流都必须依托字节流而存在

4.FileWriter 与FileReader

字符输入流与输出流,用法与字节输入出流相似,区别是该方法操作的是字符或字符数组

例:向该目录下的a.txt文件中写入helloworld

File file = new File("a.txt");  FileWriter fw = new FileWriter(file);  String str = "helloworld";  fw.write(str.toCharArray());         //转化成字符数组  fw.close();  System.out.println("输出成功");
例:用读取字符的方式将该目录下的a.txt文件中的内容读取出来并打印
 File file = new File("a.txt"); FileReader fr = new FileReader(file); int d =0; while ((d=fr.read())!=-1) { System.out.print((char)d);} fr.close();
用读取数组的方式将该目录下a.txt文件中的内容读取出来并打印
 File file = new File("a.txt"); FileReader fr = new FileReader(file); char[]c = new char[(int) file.length()]; int d =0; while ((d=fr.read(c))!=-1) { System.out.print(new String(c));} fr.close();
5.BufferedWriter 与 BufferedReader

字符缓冲流是提供了按行读取字符串的方法readLine(),每次调用读取一行内容

   例:用字符缓冲流向该目录下的a.txt文件写入helloworld

 File file = new File("a.txt");  FileWriter fw = new FileWriter(file);  BufferedWriter bw = new BufferedWriter(fw);  String str = "helloworld";  bw.write(str.toCharArray());  bw.close();  System.out.println("输出成功");
例:用字符缓冲流读取该目录下的a.txt中的内容并打印
File file = new File("a.txt"); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr);  String line = null; while((line=br.readLine())!=null){ System.out.println(line); } fr.close();
6.转换流OutputStreamWriter 与 InputStreamReader()  这两种转换流是加载在字节流上可以将字节流转化成字符流

例:按指定的字节码向文件中写入内容:

FileOutputStream fos = new FileOutputStream("osw.txt");        OutputStreamWriter osw = new OutputStreamWriter(fos,"GBK");//传参时定义转换的字节码                osw.write("Mr范");         osw.close();
例:按指定编码读出文件中的内容:
 FileInputStream fis = new FileInputStream("osw.txt");        InputStreamReader isr = new InputStreamReader(fis,"GBK");        int chs = -1;        while((chs = isr.read()) != -1){            System.out.println((char)chs);        }        isr.close();