Java IO流

对于IO流,反正一直都是迷迷糊糊的一个状态,懂的不是很透彻,今天研究一下,顺便在这里记个笔记。

1、数据向内存流动是输入流,反之,是输出流。程序运行在内存中,文件保存在磁盘中,在程序中读取文件,是从磁盘到内存,属于输入流。如果数据要从程序输出到文件中,便是内存写入到磁盘,是输出流。所以说输入流是read,输出流是write。

2、字节流:以字节(byte)为单位进行读取,可用于读取任意类型文件及二进制文件。

     字符流:用于读取文本文件,不能操作二进制文件。

     那文本文件和二进制文件到底是怎么回事啊?是这样,计算机文件分为二进制文件和文本文件两种。一个最简单的区分方法:能用记事本直接打开的文件是文本文件,反之就是二进制文件。图像、音频、视频文件就都是二进制文件,将一张图片用记事本打开会看到一堆乱码,如果在这堆乱码里面随便加点东西,那这张图片就打不开了,这就是最糙的加密方式。另外,文件是什么类型的看文件后缀名没有意义,那个后缀名其实可以随意设置的,比方说有些病毒其实是可执行文件但它的后缀就是txt。

  字节流 字符流
输入 InputStream Reader
输出 OutputStream Writer

IO流类图结构

3、要记得在finally里面关闭IO流

下面放两个例子,在IO编程的过程中一定要多查帮助文档。

1、读取文件,使用FileInputStream读文件(磁盘->内存)。

import java.io.*;

public class Test {
    public static void main(String[] args) {
        //文件对象f->E://test.txt
        File f = new File("E://test.txt");
        FileInputStream fis=null;
        try {
            //文件没有读写能力 所以需要FileInputStream
            fis = new FileInputStream(f);
            byte []b = new byte[1024];//该字节数组相当于缓存 一次读取这么多
            while(fis.read(b)!=-1)//如果文件读取完毕,read()会返回-1
            {
                String s = new String(b);//将字节转成string
                System.out.print(s);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            //关闭文件流(必须放在finally)
            try {
                fis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

2、将键盘输入的内容保存到文件(内存->磁盘),用FileOutputStream。

import java.io.*;
public class Test1 {
    
public static void main(String[] args) {
        File f = new File("E://test.txt");
        InputStreamReader isr = null;
        BufferedReader br = null;

        FileOutputStream fos=null;
        try {
            isr = new InputStreamReader(System.in);
            br = new BufferedReader(isr);
            fos = new FileOutputStream(f);
            String s;
            s = br.readLine();
            fos.write(s.getBytes());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                isr.close();
                br.close();
                fos.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
        
    }

}
原文地址:https://www.cnblogs.com/littleLittleTiger/p/10334533.html