Java.io.OutputStream和InputStream详解

765 阅读2分钟

IO流的分类:

按照流的方向可以分为:输入流和输出流;

按照流的数据类型来分:字节流和字符流;

字节流->输入流:InputStream 输出流:OutputStream

字符流-> 输入流:Reader 输出流:Writer

一切皆字节:计算机中的任何数据(文本、图片、视频、音乐)都是以二进制的形式存储的,在数据传输时,也都是以二进制的形式存储的,后续学习的任何流,在传输时底层都是二进制。

Java.io.FileOutputStream

文件输出流是用于将数据写入FileFileDescriptor的输出流。 文件是否可用或是否可以创建取决于底层平台。

public class OutputStream {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("d://a.txt");
        byte[] bytes = {65,66,67,68};
        fos.write(bytes);
        fos.close();
        System.out.println("已经写出");
    }
}

输出结果:

D盘生成了一个新文件a.txt,且里面写了内容ABCD.

若是想在文件里面追加新内容,FileOutputStream里面可以加上true,这表示追加新内容。

FileOutputStream fos = new FileOutputStream("d://a.txt",true);

public class OutputStream {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("d://a.txt",true);
        //将ABCDE转成字节
        byte[] bytes = "ABCDE".getBytes();
        //从ABCDE的第一位开始,写两位,即AB
        fos.write(bytes,0,2);
        fos.close();
        System.out.println("已经写出");
    }
}

输出结果:ABCDAB

FileInputStream

是InputStream用的最多的一个子类,用于读取诸如图像数据的原始字节流

public class OutputStream {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("d://a.txt");
        //从此输入流中读取一个字节的文件
        byte b =(byte) fis.read();
        System.out.println(b);
        fis.close();
    }
}

输出结果:65

如果想读出文件里的全部,可以使用循环:

public class OutputStream {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("d://a.txt");
        //从此输入流中读取一个字节的文件
        while (true){
            byte b = (byte)fis.read();
            //一共可以输出255个,当文件里的内容全都读完了,则输出-1
            if (b == -1){
                break;
            }
               System.out.println((char) b);
        }
        fis.close();
    }
}

输出结果:A B C D A B