美文网首页Java 杂谈IT技术篇
java基础io流之字符流的变革

java基础io流之字符流的变革

作者: 6c38bc5d384c | 来源:发表于2019-01-16 14:51 被阅读0次

    字符流的诞生:

    转换流已经是字符流了,但是他们的名字太长了,Java就提供了其子类供我们使用。

    FileWriter 、FileReader 继承了其父类的所有方法。

    java技术学习qun:59,789,1510,每天分享一点java知识干货!

    字符流=字节流+编码表

    OutputStreamWriter = FileOutputStream + 编码表(GBK)

    FileWriter = FileOutputStream + 编码表(GBK)

    InputStreamReader = FileInputStream + 编码表(GBK)

    FileReader = FileInputStream + 编码表(GBK)

    复制改写:

    FileWriter fw = new FileWriter("e:\b.txt");

    FileReader fr = new FileReader("b.txt");

    char[] chars =new char[1024];

    int len = 0;

    while ((len = fr.read(chars)) != -1) {

    fw.write(chars,0,len);

    fw.flush();

    }

    fw.close();

    fr.close();

    /**

    * 总结,到现在为止,加上字节流,复制文本的方式有8种,但是复制图片视频等文件只有四种字节流的方式,因为不能用字符流复制图片视频mp3等

    */

    字符流学习前辈字节流的经验,也设计了字符缓冲流。

    BufferedReader、

    BufferedWriter

    和字节缓冲流的设计基本一样,也有两个构造方法,但是我们只要默认的缓冲大小的构造方法就可以了。

    java技术学习qun:59,789,1510,每天分享一点java知识干货!

    用字符缓冲流改写复制功能:

    BufferedReader br = new BufferedReader(new FileReader("c.txt"));

    BufferedWriter bw = new BufferedWriter(new FileWriter("e:\d.txt"));

    char[] chars = new char[1024];

    int len = 0 ;

    while ((len = br.read(chars)) != -1) {

    bw.write(chars,0,len);

    bw.flush();

    }

    br.close();

    bw.close();

    然而字符缓冲流还有自己特殊的读写功能。

    BufferedWriter :void newLine() 换行

    BufferedReader :String readLine() 读一行数据

    public static void main(String args[]) throws IOException {

    // write();

    read();

    }

    private static void read() throws IOException {

    BufferedReader br = new BufferedReader(new FileReader("bw.txt"));

    String line = null;

    while ((line = br.readLine()) != null) {

    System.out.println(line);

    //readLine不会读取换行符

    //读到末尾返回null

    }

    br.close();

    }

    private static void write() throws IOException {

    BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));

    for (int i = 0; i <10 ; i++) {

    bw.write("你好哈哈哈哈哈");

    bw.newLine();//换行,并且自动检测不同系统的换行符

    bw.flush();

    //一般三个连用

    }

    bw.close();

    }

    用字符缓冲流的特殊方式升级复制功能:

    BufferedReader br = new BufferedReader(new FileReader("bw.txt"));

    BufferedWriter bw = new BufferedWriter(new FileWriter("e:\bw.txt"));

    String line = null;

    while ((line = br.readLine()) != null) {

    bw.write(line);

    bw.newLine();

    bw.flush();

    }

    bw.close();

    br.close();

    //总结 字符流复制文本有5种方式

    字符流的基础基本就聊完了,还有一个比较常用的类LineNumberReader

    查看源码可知LineNumberReader继承自BufferedReader,并且增加了行号的操作。

    LineNumberReader lnr = new LineNumberReader(new FileReader("a.txt"));

    String line = null;

    while ((line = lnr.readLine()) != null) {

    System.out.println(lnr.getLineNumber()+":"+line);

    }

    1:A

    2:S

    3:F

    但是LineNumberWriter。源码很简单,更多的操作请看源码。

    io流总结:

    java技术学习qun:59,789,1510,每天分享一点java知识干货!

    java 中文api :

    http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

    查看api源码,深入理解io设计理念。

    好了,本篇文章就分享到这里了。有兴趣的新手伙伴们可以关注收藏起来,以后需要的时候可以多看看。如果有正在学java的程序员,可来我们的java技术学习扣qun哦:59789,1510里面免费送java的视频系统教程!

    相关文章

      网友评论

        本文标题:java基础io流之字符流的变革

        本文链接:https://www.haomeiwen.com/subject/djjmdqtx.html