博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础IO流(三)字符流
阅读量:5732 次
发布时间:2019-06-18

本文共 3235 字,大约阅读时间需要 10 分钟。

字符流:

  文本和文本文件:

    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();            }

 

转载于:https://www.cnblogs.com/deepSleeping/p/10023186.html

你可能感兴趣的文章
新手也能懂,消息列队其实很简单!
查看>>
以太坊经典成为第六个加密货币
查看>>
java B2B2C Springboot电子商务平台源码 -eureka集群整合config配置中心
查看>>
viaurlbox下安装centos6
查看>>
Customize a Distro with Remastersys
查看>>
Java工程师成神之路
查看>>
Linux学习笔记(二)系统常用命令和一些概念
查看>>
SaltStack实战之配置管理-LAMP自动化部署
查看>>
phpstorm 更换字体
查看>>
Linux命令大全
查看>>
jQuery表单美化插件jqTransform
查看>>
跟我学Spring Cloud(Finchley版)-04-服务注册与服务发现-原理剖析
查看>>
终端、作业控制与守护进程
查看>>
如何让 Drupal 使用 Wordpress 形式的编辑代码?
查看>>
ServletContext作用功能详解
查看>>
makefile(04)_函数
查看>>
自定义类似viewpager的viewgroup
查看>>
将博客搬至CSDN
查看>>
Linux运维学习-4——2016年7月26日
查看>>
MongoDB GroupBy操作, 结果集大小限制问题。
查看>>