zoukankan      html  css  js  c++  java
  • Java基础IO流(三)字符流

    字符流:

      文本和文本文件:

        java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)文件是byte byte byte....的数据序列,而文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果。

      字符流(Reader Writer) ------> 操作的是文本文件;一次处理一个字符;字符的底层仍然是基本的字节序列

      字符流的基本实现

        InputStreamReader 完成byte流解析为char流,按照编码解析

        OutputStreamWriter 提供char流到byte流,按照编码处理

    public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub
            FileInputStream in = new FileInputStream("D:\my\studyWorkSpace\java\test.txt");
            InputStreamReader isr = new  InputStreamReader(in);//默认项目的编码,将来操作的时候,要写文件本身的编码格式
            /*
            int c;
            while((c = isr.read()) != -1){
                System.out.print((char)c);
            }*/
            
            /*
            * 批量读取,放入buffer这个字符数组,从第0个位置开始放置,最多放buffer.length个
            *返回的是读到的字符的个数
            */
            char[] buffer = new char[8 * 1024];
            int len;
            while((len = isr.read(buffer,0,buffer.length)) != -1){
                String s = new String(buffer,0,len);
                System.out.println(s);
            }
            
        }

    心得:以字符为单位进行拷贝,和字节流用法差不多,主要是考虑编码格式。

    FileReader,FileWriter

    注意:FileReader读出的时候,按照项目默认编码读的,如果文件和项目默认编码不一致,那就只能用InputStreamReader来转码读取了。

    public static void main(String[] args) throws IOException{
            // TODO Auto-generated method stub
            FileReader fr = new FileReader("D:\my\studyWorkSpace\java\test.txt");
            FileWriter fw = new FileWriter("D:\my\studyWorkSpace\java\test1.txt");
            
            char[] buffer = new char[2056];
            int c;
            while((c = fr.read(buffer,0,buffer.length)) != -1){
                fw.write(buffer,0,c);
                fw.flush();
            }
            fr.close();
            fw.close();
        }

    字节流的过滤器:

      BufferedReader ---》readLine 一次读一行

           BufferedWriter/PrintWriter ----》写一行

    public static void main(String[] args) throws IOException{
            //对文件进行读写操作
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:\my\studyWorkSpace\java\test.txt")));
            /*BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:\my\studyWorkSpace\java\test2.txt")));*/
            PrintWriter pw = new PrintWriter("D:\my\studyWorkSpace\java\test3.txt");
            String line;
            while((line = br.readLine()) != null){
                System.out.println(line);//一次读一行,并不能识别换行(读的时候不识别换行符,一行一行读,一行一行的数据输出,但是没有输出换行符,没有手动换行的话所有数据会在一行输出)
                /*bw.write(line);
                //单独写出换行操作
                bw.newLine();//换行操作
                bw.flush();*/
                
                pw.println(line);
                pw.flush();
            }
            br.close();
            /*bw.close();*/
            pw.close();
        }

    行号追踪LineNumberReader

    public static void main(String[] args)throws IOException {
            FileReader fr = new FileReader("D:\my\studyWorkSpace\java\test.txt");
            PrintWriter pw = new PrintWriter("D:\my\studyWorkSpace\java\testlr.txt");
            LineNumberReader lr = new LineNumberReader(fr);
            //每一行的字符串
            String line = null;
            //当读到的内容不是空的时候
            while((line = lr.readLine()) != null){
                //每一行前面加上行号,并且换行输出
                pw.println(lr.getLineNumber() + ":" + line);
                pw.flush();
            }
            lr.close();
            pw.close();
            
        }
  • 相关阅读:
    Android文字上下滚动
    Java怎么去除字符串中的多个空白【split(" ")与split("\s+")】
    Java:Scanner.nextLine()和Scnner.next()的区别,以及多条nextLine()输入问题的解决方法
    SQL server报错18456(又名SQL server怎么用sa登入)
    Android Studio快速自动生成findViewById
    java.sql.Date和java.util.Date的联系与区别【转载】
    Linux Crontab 不执行
    PostgreSQL 全量 增量 归档 备份工具 pg_rman介绍与使用(转载)
    Rman备份的保留策略(retention policy) (转载)
    Oracle RMAN block_change_tracking(块更改追踪)
  • 原文地址:https://www.cnblogs.com/deepSleeping/p/10023186.html
Copyright © 2011-2022 走看看