ShineYoung

导航

 

Java IO

Java的输入流和输出流

“流”是指从源“流向”目的地的数据流,Java把各种数据源和目标之间数据的传输统一抽象为流,通过对流的读写操作来实现IO操作

首先通过一张图片来了解Java IO(图片来自菜鸟教程)

看了图片之后可以知道IO操作离不开Reader,Writer,InputStream,OutputStream这四个顶级接口,其他继承自这四个接口的有各自的用途,但最常用的方法还是来自这四个接口

InputStream

先来看一段代码,创建输入流很简单

public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        String file = "文件地址";
        InputStream inputStream = new FileInputStream(file);
    }
}

常见的用法

public class Main {
    public static void main(String[] args) throws IOException {
        String file = "文件地址";
        InputStream inputStream = new FileInputStream(file);
        byte[] list = new byte[1000];
        
        System.out.println("文件长度"+(inputStream.available()));
        
        int b = inputStream.read();
        
        while(b!=1) {
            b = inputStream.read();
        }
        inputStream.read(list);
        inputStream.close();
    }
}

 

 

available()返回输入流下一次调用能够不瘦阻塞的读取或跳过的字节数,大白话解释,没有阻塞返回文件字节数。
read()从输入流读取一个字节返回范围在0~255的一个整数,如果流已读到末尾返回-1,虽然返回值是int,但实际读取双字节字符,比如汉字“中”的编码为“D6D0”,则依次返回214(D6),208(D0)
read(byte[] list)从输入流读取一定数量的字节存入字节数组list,返回读取的字节数
close()关闭输入流,释放资源(这是一个好习惯,虽然Java有自动回收的机制,但是既然没用就早点释放)



OutputStream

输入流和输出流相对,看一个综合例子
import java.io.*;
 
public class fileStreamTest {
    public static void main(String args[]) {
        try {
            byte bWrite[] = { 11, 21, 3, 40, 5 };
            OutputStream os = new FileOutputStream("test.txt");
            for (int x = 0; x < bWrite.length; x++) {
                os.write(bWrite[x]); // writes the bytes
            }
            os.close();
 
            InputStream is = new FileInputStream("test.txt");
            int size = is.available();
 
            for (int i = 0; i < size; i++) {
                System.out.print((char) is.read() + "  ");
            }
            is.close();
        } catch (IOException e) {
            System.out.print("Exception");
        }
    }
}

 

write(int b)将int b的低字节写到输出流
write(byte b[])将数组b写到输出流
close()关闭字节流
 
Reader,Writer和前面两者区别不大,只是字符流和字节流的区别

posted on 2019-03-11 22:11  ShineYoung  阅读(106)  评论(0编辑  收藏  举报