zoukankan      html  css  js  c++  java
  • Java—IO流 字符流

      java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)。

      文件是byte byte byte ... 的数据序列。

      文本文件是文本(char)序列按照某种编码方案(uft-8、utf-16be、gbk)序列化为byte的存储结果。

    • 字符流(Reader、Writer)-->操作的是文本、文本文件

      1.字符的处理,一次处理一个字符

      2.字符的底层仍然是基本的字节序列

      3.字符流的基本实现:

      InputStreamReader是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。

      OutputStreamWriter是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。

    public class ISReaderAndOSWriter {
    
        public static void main(String[] args) throws IOException {
            FileInputStream in = new FileInputStream("F:\javaio\java.txt");
            FileOutputStream out = new FileOutputStream("F:\javaio\java1.txt");
            
            InputStreamReader isr = new InputStreamReader(in, "gbk");
            OutputStreamWriter osw = new OutputStreamWriter(out, "gbk");
            
            int c;
    //        while ((c = isr.read()) != -1) {
    //            System.out.print((char)c);
    //        }
            
            char[] buf = new char[8 * 1024];
            while ((c = isr.read(buf, 0, buf.length)) != -1) {
                String s = new String(buf, 0, c);
                //System.out.println(s);
                osw.write(s);
            }     
            isr.close();
            osw.close();
        }
    
    }

       4.文件读写流,FileReader和FileWriter,读取字符文件和写入字符文件的便捷类。

    public class FileReaderAndFileWriter {
        public static void main(String[] args) throws Exception {
            FileReader fr = new FileReader("F:\javaio\javautf.txt");
            FileWriter fw = new FileWriter("F:\javaio\javautf1.txt");
            //FileWriter fw = new FileWriter("F:\javaio\javautf1.txt", true);//向指定文件中追加内容
            
            char[] buf = new char[1 * 1024];
            int c;
            while ((c = fr.read(buf, 0, buf.length)) != -1) {
                System.out.println(c);
                fw.write(buf, 0, c);
                fw.flush();
            }
            fr.close();
            fw.close();
        }
    }

      5.字符流的过滤器

      BufferedReader,一次读一行

      BufferedWriter/PrintWriter,一次写一行

    public class BufRAndBufWOrPrintW {
    
        public static void main(String[] args) throws Exception {
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("F:\javaio\javautf.txt")));
            //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("F:\javaio\javautf2.txt")));
            PrintWriter pw = new PrintWriter("F:\javaio\javautf3.txt");
            
            String s;
            while ((s = br.readLine()) != null) {
                //一次读一行,不能识别换行符
                //bw.write(s);
                //bw.newLine();//写入一个行分隔符
                //bw.flush();
                pw.println(s);//通过写入行分隔符字符串终止当前行
                pw.flush();
            }
            br.close();
            //bw.close();
            pw.close();
        }
    }
  • 相关阅读:
    如何打日志才能方便排查问题?
    为什么 HashMap 并发时会引起死循环?
    Spring 为什么会有 FactoryBean?
    常用 Git 使用技巧,收藏了~
    Gin中context的使用
    Gin的路由算法
    k8s中的网络通信总结
    k8s架构
    Golang中的值拷贝与引用拷贝
    golang知识要点总结
  • 原文地址:https://www.cnblogs.com/tianxintian22/p/6838545.html
Copyright © 2011-2022 走看看