JAVA IO(三)

java中IO分类
按照数据流向分:输入流—————-输出流
按照数据单位:字节流——————字符流
按照是否直接和数据源相连:节点流———处理流

一,字节流转换成字符流(转换流)

用InputStreamReader 输入字节流转换成输入字符流

FileInputStream fis = new FileInputStream("aaa.txt");
Reader reader=new BufferedReader(fis);

用OutputStreamWriter输出字节流转换成输出字符流

FileOutputStream fos=new FileOutputStream("bbb.txt");
Writer writer=new OutputStreamWriter(fos);
public class TestChangStream {
    //输入  字节流--->字符流
    public Reader inputStreamToReader(InputStream is){
        Reader reader = null;
        reader  = new InputStreamReader(is);
        return reader;
    }
    //输出 字节流--->字符流
    public Writer outputStreamToWriter(OutputStream os){
        Writer writer = null;
        writer  = new OutputStreamWriter(os);
        return writer;
    }
}

2.按行读写
按字节(取一滴) —– 按字符(取一勺) —– 按行(取一桶)
(1). 以行为单位读写,比较方便
(2). 相当于缓冲区 缓冲区每次取一行

读一行:
使用的是 BufferedReader的readLine()方法

写一行:
使用的是 PrintWriter的println()方法
按行写也可以用BufferedWriter的write()方法换一行是newLine();

public class TestBufferWritter {
    public static void main(String[] args) {
        // FileInputStream fis=null;
        FileReader fr = null;
        BufferedReader br = null;
        FileWriter fw = null;
        BufferedWriter bw = null;
        // PrintWriter pw = null;
        try {
            fr = new FileReader("F:\\Bluemix\\chapter13\\20160416.txt");
            br = new BufferedReader(fr);
        } catch (FileNotFoundException e) {
            System.out.println("文件不存在");
            e.printStackTrace();
        }
        // 写
        try {
            fw = new FileWriter("F:\\Bluemix\\chapter13\\222222222.txt");
            // pw = new PrintWriter(fw);
            bw = new BufferedWriter(fw);
            String str = null;
            while ((str = br.readLine()) != null) {
                /*if (br.ready()) {
                    pw.print(str);
                } else {
                    pw.println(str);
                }*/
                bw.write(str);
                bw.newLine();

            }
            System.out.println("写入成功!");
        } catch (IOException e) {
            System.out.println("写入失败");
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    System.out.println("br关闭失败");
                    e.printStackTrace();
                }
            }
            if (fr != null) {
                try {
                    fr.close();
                } catch (IOException e) {
                    System.out.println("fr关闭失败");
                    e.printStackTrace();
                }
            }
            if (bw != null) {
                try {
                    bw.close();
                } catch (IOException e) {
                    System.out.println("bw关闭失败");
                    e.printStackTrace();
                }
            }
            if (fw != null) {
                try {
                    fw.close();
                } catch (IOException e) {
                    System.out.println("fw关闭失败");
                    e.printStackTrace();
                }
            }
        }

    }

}

三,缓冲流

功能:减少和硬盘打交道次数 提高读写效率
字节流、字符流频繁和硬盘打交道 速度比较慢 效率低,可以使用缓冲提高效率。

带缓冲的流:
1.BufferedReader
2.BufferedWriter
3.PrintWriter

重点:缓冲区的内容写入到文件的三种情况:

1.调用BufferedWriter的flush()方法
2.缓冲流关闭 close();调用close()方式是系统缓冲的数据写到磁盘中
3.缓冲区满 ,默认缓冲区大小为16384个字节
实质char[] charArr = new char[8192];

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值