IO流:

输入流:是按程序来说的。比如文件到程序。

输出流:程序到文件。

字节流:InputStream/OutputStream

1.InputStream

read();读入一个字节并返回,包装为int,返回-1表示已读不到

read(byte[] b) 一次读入尽可能多的字节去填满字节数组b,返回实际读到的字节数,-1表示已读不到。

read(byte[] b, int off, int len) 一次读入尽可能多的字节去填满字节数组boff开始的len个空间。

close()

package day11;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class TestInPutStream {
    public static void main(String[] args) throws IOException {
        InputStream is=null;
        is=new FileInputStream(new File("d:\\a.txt"));
        int i=0;
        while((i=is.read())!=-1){
            System.out.println((char)i);
        }
        /*byte[] b = new byte[10];
        int len = is.read(b);
        System.out.println(len);*/
        is.close();
    }
}

D盘中新建一个文本文档a.txt 里面内容为;abcde

则程序输出结果为:abcde

2.OutputStream

write(int b)

write(byte[] b)

write(byte[] b, int off, int len)

flush()

close()

例子:

package day11;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class TestOutputStream {
    public static void main(String[] args) throws IOException {
        OutputStream os = null;
        // 输出流:自己会新建一个文件
        os = new FileOutputStream(new File("d:\\b.txt"),true);
        os.write(97);
        os.close();
    }
}
结果显示:输出流自己会新建一个文件,会在D盘新建一个b.txt文件,显示a

3.基本流/低级流/节点流

FileInputStream/FileOutputStream:

包装流:IO的精华。

基本流中构造中参数是介质。

包装流构造中参数是流。


package day11;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestCopyFile {
    public static void main(String[] args) throws IOException {
        copyFile("d:\\src.rar","d:\\dest.rar");
    }
                 
    public static void copyFile(String file1,String file2) throws IOException{
        FileInputStream fis = new FileInputStream(new File(file1));
        FileOutputStream fos = new FileOutputStream(new File(file2));
        int b = 0;
        byte[] arrByte = new byte[8*1024];
        // 读源文件,将读入的每个字节依次写入目标文件即可。
        while((b=fis.read(arrByte))!=-1){
            fos.write(arrByte,0,b);
        }
        // 流操作的最后一定要关闭
        fis.close();
        fos.close();
    }
}
结果:在D盘中,会将src.rar复制成为dest.rar.

4.包装流/高级流:

BufferedInputStream/BufferedOutputStream:缓冲流

DataInputStream/DataOutputStream:数据流

package day11;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestDISDOS {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream(new File("d:\\c.txt"));
        DataOutputStream dos = new DataOutputStream(fos);
        dos.writeDouble(3.14);
        dos.writeUTF("中国");
        FileInputStream fis = new FileInputStream(new File("d:\\c.txt"));
        DataInputStream dis = new DataInputStream(fis);
        double d = dis.readDouble();
        String s = dis.readUTF();
        System.out.println(d);
        System.out.println(s);
        // 如何快速写小数
//      BufferedOutputStream/DataOutputStream/FileOutputStream
        DataOutputStream out = new DataOutputStream(
                new BufferedOutputStream(
                        new FileOutputStream(new File("d:\\c.txt"))));
        out.writeDouble(3.1415);
        // 对于包装流,关闭时候只关闭外层流就可以了,外层流中有对内层流的关闭。
        dos.close();
        dis.close();
        out.close();
    }
}
结果:3.14 中国

5.字符流:Writer/Reader

InputStreamReader/OutputStreamWriter

FileReader/FileWriter

BufferedReader/BufferedWriter

package day11;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class TestIROW {
    public static void main(String[] args) throws IOException {
        File file = new File("d:\\b.txt");
        /*FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis,"gbk");// 字节转字符
        // 对于汉字来说,gbk/gb2312占两个字节,utf-8占三个字节。
        char i = (char)isr.read();
        System.out.println(i);
        FileOutputStream fos = new FileOutputStream(file);
        OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");*/
//      osw.write("中国");
//      for(int k=0;k<60000;k++){
//          osw.write(k);
//      }
        // 系统默认编码
//      FileReader fr = new FileReader(file);
//      char ch = (char) fr.read();
//      System.out.println(ch);
        // 区别 1.不能指定编码格式,按系统编码格式。2.不能包装其他流
        FileWriter fw = new FileWriter(file);
        fw.write("一二三四五\r\n");
        fw.write("六七八九十");
          
        fw.close();
//      fr.close();
//      osw.close();
//      fis.close();
    }
}
结果:一二三四五
      六七八九十