• 日常学习之字符流


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

    •   对于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
  • 相关阅读:
    mysql: 多时区的聚合统计
    机器学习实例---3.2、朴素贝叶斯之新浪新闻分类
    机器学习实例---3.1、朴素贝叶斯基础
    机器学习实例---2.1、决策树(实战)
    python的pickle模块
    机器学习实例---2.1、决策树(介绍)
    如何计算熵
    sklearn库简单介绍
    机器学习实例---1.3、k-近邻算法(数字识别)
    理解ThreadPoolExecutor线程池的corePoolSize、maximumPoolSize和poolSize
  • 原文地址:https://www.cnblogs.com/codehero/p/13341726.html
Copyright © 2020-2023  润新知