日常学习之字符流

  今天自己写代码时需要一个大量得日志文件,所以想用流来模拟真实产生的数据,一般用字节流比较多一点,因为我这个是纯文本,所以用字符流也可以,不过早已忘光,所以又随便在网上搜集了一点资料来补充自己的知识库,这里只是一些浅显的认知,我刚开始也自己读了一点源码,究其还是利用字节流来读或者写,文章一会就简单提下。

  •   对于Writer这个抽象类来说,其主要的方法如图所示: 

                    

  •   当写纯文本时,可以利用FileWriter这个类来搞定,我们可以利用不同的重载方法来完成写文件这个操作,如下代码演示了三种写文件的方式:
public class TestFileWrite {
    public static void main(String[] args) {
        File file = new File("D:/lj/test4.dat");
        Writer writer = null;
        try {
            writer = new FileWriter(file);
            //进行写的操作
            String str = "李杰会越来越好!";
           /* //方式一:
            //字符串--》字符数组,不存在编码
            char[] chars = str.toCharArray();
            writer.write(chars,0,chars.length);
            writer.flush();*/

           /*//方式二
            writer.write(str);
            writer.flush();*/

           //方式三:利用append,类似于StringBuilder的appende方法,这个比write灵活一点
            writer.append("李杰").append("加油");
            writer.flush();

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (null!=writer){
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
  • 下面来展示我此次利用字符流来模拟生成的日志文件:
    @Test
        public void create01() {
            try (FileWriter fw = new FileWriter("d:/mytst.log");
                 BufferedWriter writer = new BufferedWriter(fw)) {
                for (int i = 0; i < 9; i++) {
                    String test = "13" + i + "	" + 10 * (i + 1) + "	" + "test" + "	" + 20 * (i + 1) + "	" + "mylog" + "	" + 40 * (i + 1) + "	" + "666";
                    writer.append(test);
                    writer.newLine();//因为想要生成很多行,所以每写一行都进行换行操作
                }
                writer.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    效果图如图所示:

  •  当然,也可以完整的利用字符流来进行复制纯文本的工作,如下代码所示(代码中利用到了字符缓冲流,能够提升读写速率)
public class Test01 {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("d:/lj/test.dat"));
             BufferedWriter bw = new BufferedWriter(new FileWriter("d:/lj/test9999.txt"))
        ) {
            String line = null;
            while ((line = br.readLine()) != null) {
                bw.write(line);
                bw.newLine();
            }
            bw.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  •  刚才提到自己随便读了一点源码,我刚开始接触java时,一点都不敢看源码,有啥不会的直接百度,现在慢慢学习自己先读读源码,实在不会在搜搜相关资料,慢慢增强自己的阅读源码能力,毕竟源码的代码风格有很多都是比较6的。
  • 本文主要谈论了字符流的Writer,其实网上关于流这块介绍的知识点是在太多了,关键要自己学会整理,比如先按字节流与字符流来区分,然后再按输入流与输出流来区分等等,这样一来,思路就比较清晰一些。好了,本文就到这里了,有啥不足之处欢迎来扰,一起探讨~
FileWriter
原文地址:https://www.cnblogs.com/codehero/p/13341726.html