Java之IO流

1、名词理解:

(一)首先要明白何为输入流、输出流、字节流、字符流

①输入与输出:

这里写图片描述

②字节与字符:

字节流:以字节为单位读取数据
字符流:以字符为单位读取数据

(二)然后四个互相结合就有了:输入字节流、输出字节流、输入字符流、输出字符流。

(三)辨别输入流、输出流、字节流、字符流:

①类名中有In的为输入流,有Out的为输出流

②类名以Stream结尾的为字节流

③类名以Reader或Writer结尾,并且里面没有Stream的为字符流

④类名中同时包含Stream和Reader或Stream和Writer,不属于这四种流

2、实际应用(本地文件的读取与写入,测试前别忘了在本地建好测试的文件):

(一)字节输入流:

File file = new File("C:/java.txt");
//创建本地文件对象,路径可以根据自己的需要修改
FileInputStream fileInputStream = new FileInputStream(file);
//创建字节输入流对象
byte[] bs = new byte[fileInputStream.available()];
// available()返回文件中的字节数
fileInputStream.read(bs);
// 将文件的数据以字节的方式读到bs中
String string = new String(bs);
// 字节数组变为字符串
fileInputStream.close();
// 关闭输入流
System.out.println(string);

(二)字节缓冲输入流:

File file = new File("C:/java.txt");
BufferedInputStream bufferedInputStream = 
new BufferedInputStream(new FileInputStream(file));
// 在字节输入流的基础上再加工成字节缓冲输入流
int value = 0;
String result;
byte[] bs = new byte[new FileInputStream(file).available()];
bufferedInputStream.read(bs);
// while ((value = bufferedInputStream.read(bs)) != -1) {
// // 直到读完全部数据,但测试了下是一次性读完的
// }
// 也可以用while这样写
System.out.println(new String(bs));

加缓冲的好处是为了提交读文件的效率,下面的缓冲也是同理


(三)字节输出流:

File file_ = new File("C:/java.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file_, true);
// FileOutputStream的第二个参数为是否追加(append)
fileOutputStream.write("FileOutputStream测试\r\n".getBytes());
// \r\n 换行后回车,getBytes将字符串转换成字节类型
fileOutputStream.flush();
// 刷新数据或提交数据
fileOutputStream.close();

(四)字节缓冲输出流:

File file_ = new File("C:/java.txt");
BufferedOutputStream bufferedOutputStream =
new BufferedOutputStream(new FileOutputStream(file_, true));
// FileOutputStream的第二个参数为是否追加(append), 在字节输出流的基础上再加工成字节缓冲输出流
bufferedOutputStream.write("BufferefOutputStream测试\r\n".getBytes());
bufferedOutputStream.flush();
bufferedOutputStream.close();

(五)字符输入流+字符缓冲输入流:

        // 字符输入流
        File file = new File("C:/java.txt");
        FileReader fileReader = new FileReader(file);
        char[] cs = new char[1024];
        // 固定字符数组的长度
        fileReader.read(cs);
        // 读取
        System.out.println(new String(cs));

        // 字符缓冲输入流
        FileReader fileReader1 = new FileReader(file);
        // 用过一次后不能重复使用
        BufferedReader bufferedReader = new BufferedReader(fileReader1);
        // 继续加工
        String s = "";
        String result = "";
        while ((s = bufferedReader.readLine()) != null) {
            // 先将文件中的数据一行行的赋给s,如果不为空说明还没有读完
            result += s;
        }
        System.out.println(result);
        // 关闭的时候从大到小关
        fileReader.close();
        bufferedReader.close();
        fileReader1.close();

(六)字符输出流+字符缓冲输出流:

        File file = new File("C:/java.txt");
        FileWriter fileWriter = new FileWriter(file, true);
        fileWriter.write("FileWriterTest测试\r\n");
        fileWriter.flush();

        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
        bufferedWriter.write("BufferedWriter测试\r\n");
        bufferedWriter.flush();

        bufferedWriter.close();
        fileWriter.close();
        //没有任何特别地东西

(七)字符字节混合使用:

        File file = new File("C:/java.txt");
        FileInputStream fileInputStream = new FileInputStream(file);
        // 字节流读取文件
        InputStreamReader inputStreamReader = new InputStreamReader(
                fileInputStream);
        // 转换成字符流
        BufferedReader bufferedReader = new    BufferedReader(inputStreamReader);
        // 再用字符流对数据进一步加工
        String s;
        while ((s = bufferedReader.readLine()) != null) {
            System.out.println(s);
        }

3、IO流应用很广泛,例如在客户端与服务端之间数据的传送与读取也可以借助IO流去实现,只不过在它们那里是截取流,不是像读取文件这样创建流。在我另一篇博客上也有说明,

网址:http://blog.csdn.net/zhengyikuangge/article/details/50000481

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值