IO流--字符流

字符流

  • 字节流适合做一切文件数据的拷贝(音视频,文本)
  • 字节流不适合读取中文内容输出
  • 字符流适合做文本的操作(读和写)

  1. Reader(抽象类)
    输入流
  • FileReader
    • 构造方法:FileReader(String name)
    • 常用方法:public int read()(继承自InputStreamReader的方法)
    • public int read(byte[] b)(继承自Reader的方法)
public void fileReaderTest() throws IOException {
        Reader r = new FileReader("E:\\java_study\\demo3\\images\\test\\zxl\\出师表.txt");
//        int code = r.read();
//        System.out.println((char) code);

//        int code;
//        while ((code=r.read()) != -1){
//            System.out.print((char)code);
//        }

        char[] buffer = new char[1024];
        int len;
        while ((len=r.read(buffer)) != -1){
            String s = new String(buffer,0,len);
            System.out.print(s);
        }
    }
  • BufferedReader
    • 构造器 BufferedReader(Reader in)
    • 常用方法:String readLine()(读取完毕返回null)
public void bufferedReaderTest() throws IOException {
        Reader r0 = new FileReader("E:\\java_study\\demo3\\images\\test\\zxl\\出师表.txt");
        BufferedReader r = new BufferedReader(r0);
//        int code = r.read();
//        System.out.println((char) code);

//        int code;
//        while ((code=r.read()) != -1){
//            System.out.print((char)code);
//        }

        //按照字符数组读
//        char[] buffer = new char[1024];
//        int len;
//        while ((len=r.read(buffer)) != -1){
//            String s = new String(buffer,0,len);
//            System.out.print(s);
//        }
        //按照行读
        String line;
        while ((line=r.readLine()) != null){
            System.out.println(line);
        }
    }
  • InputStreamReader
    • 构造方法:InputStreamReader(InputStream in)
    • 常用方法:int read(char[] cbuf, int off, int len)


  1. Writer(抽象类)
  • FileWriter
    • 常用构造器:FileWriter(String name)
    • void write(String str, int off, int len)(继承自OutputStreamWriter的方法)
    • void write(char[] cbuf, int off, int len)(继承自OutputStreamWriter的方法)
    • void write(int c)(继承自OutputStreamWriter的方法)
 public void fileWriterTest() throws Exception{
        Writer w = new FileWriter("E:\\java_study\\demo3\\images\\test\\zxl\\滕王阁序.txt",true);
        w.write('滕');
        w.write("王阁序");
        w.write("\r\n");
        char[] chars = {'豫','章','故','郡'};
        w.write(chars);
        w.write(chars,0,2);//第0个开始,两个
        w.write("洪都信服");
        w.write("洪都信服",0,3);


        w.flush();
        w.close();

    }
  • BufferedWriter
    • 构造器:BufferedWriter(Wirter w)
    • 写方法:public void write(String s)
    • 写方法:void write(char[] cbuf, int off, int len)
    • 常用方法:void newLine()(换行)
    public void bufferedWriterTest() throws Exception{
        Writer w0 = new FileWriter("E:\\java_study\\demo3\\images\\test\\zxl\\滕王阁序.txt",true);
        BufferedWriter w = new BufferedWriter(w0);
        w.write('滕');
        w.write("王阁序");
        w.write("\r\n");//换行
        w.newLine();//换行
        char[] chars = {'豫','章','故','郡'};
        w.write(chars);
        w.write(chars,0,2);//第0个开始,两个
        w.write("洪都信服");
        w.write("洪都信服",0,3);

        w.flush();
        w.close();

    }
  • OutputStreamWriter

    • 构造方法:OutputStreamWriter(OutputStream out)
    • void write(char[] cbuf, int off, int len)
    • void write(int c)
    • void write(String str, int off, int len)
  • PrintWriter

    • 构造方法:PrintWriter(String fileName)
    • 常用方法:void print()可打印几乎所有类型数据

使用BufferWriter和BufferReader将文件1的文字排序后存储到文件2中

public static void changeCSB(){
        try(
                BufferedReader r = new BufferedReader(new FileReader("E:\\java_study\\demo3\\images\\test\\zxl\\出师表.txt"));
                BufferedWriter w = new BufferedWriter(new FileWriter("E:\\java_study\\demo3\\images\\test\\zxl\\出师表1.txt"));
                ){
            List<String> list = new ArrayList<>();
            String line;
            while ((line = r.readLine()) != null){
                list.add(line);
            }
            System.out.println(list);

            //自定义排序规则
            List<String> sizes = new ArrayList<>();
            Collections.addAll(sizes,"一","二","三","四","五","六","七","八","九","十","十一","十二");
            Collections.sort(list, new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    return sizes.indexOf(o1.substring(0,o1.indexOf(".")))
                            -sizes.indexOf(o2.substring(0,o2.indexOf(".")));
                }
            });
            System.out.println(list);

            for (String s : list) {
                w.write(s);
                w.newLine();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

一般情况下,使用PrintStream输出流,使用BufferedReader输入流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值