• 中文
    • English
  • 注册
  • 查看作者
    • Java-IO:字符输入输出流

      一.  前言

      在上文中,我们讲解了《字节输入输出流》,这里再看一下字符输入输出流。

      二.  字符输入流FileReader

      字符输入流和字节输入流的步骤大致相同,而且字符输入流可以防止乱码的发生。

      1. 字符输入流的操作步骤:

      2. 使用File类确定要操作的文件

      3. 使用InputStreamReader的子类FileReader进行对象实例化

      4. 进行读操作

      5. 释放资源

      package io.zhangjia.io;
      
      import java.io.*;
      
      public class Reader {
          public static void main(String[] args) throws IOException {
              //        1. 使用File确定要读取的文件
              File file = new File("E:\\zhangjia\\text.txt");
      //        2.  实例化FileReader
              FileReader reader = new FileReader(file);
      //        3.   开始读
              char[] chars = new char[128];//长度任意,因为是字符,所以即使给单数也不会乱码
              StringBuffer sb = new StringBuffer();
              int len = -1;
              while((len = reader.read(chars)) != -1) {
                  String s = new String(chars,0,len);
                  sb.append(s);
              }
              System.out.println(sb);
              reader.close();
          }
      }

      三.  字符输出流FileWriter

      字符输出流和字节输出流的步骤大致相同,而且字符输出流可以防止乱码的发生。

      1. 字符输入流的操作步骤:

      2. 使用File类确定要操作的文件

      3. 使用OutputStreamWriter的子类FileWriter 进行对象实例化

      4. 进行读操作

      5. 释放资源

      package io.zhangjia.io;
      
      import java.io.File;
      import java.io.FileOutputStream;
      import java.io.FileWriter;
      import java.io.IOException;
      
      public class Writer {
          public static void main(String[] args) throws IOException {
      //        1. 使用File确定要写入的文件
              File file = new File("E:\\zhangjia\\text.txt");
      //        2.  实例化FileWriter
      //        FileWriter writer = new FileWriter(file,true);//在原文件内容基础上添加内容
              FileWriter writer = new FileWriter(file);//替换源文件的内容
      //        3.   开始写
              String str = "张甲";
              writer.write(str);
              writer.close();
          }
      }

      四.  字节流和字符流的区别

      1. 如果将字节流和字符流的close()方法都删除的时候,字节流可以正常写入数据,而字符流不能

      2. 字符流操作看起来操作的是字符数据,其实在类中做了转换(char->byte),将转换好的数据存储在缓冲区,不执cLose方法,缓冲区的数据不会被输出,如果有需求不能关闭字符流,可以使用flush方法强制清空缓冲区

      3. 磁盘上的文件都是以字节形式进行存储,比如:媒体文件(图片、音频、视频),文档等等。开发中大部分情况都是使用字节流操作,如果操作的数据有中文,需要使用字符流,因为字节流可能造成中文乱码。

      山东省
    • 0
    • 0
    • 0
    • 1.1k
    • 请登录之后再进行评论

      登录

      赞助本站

      • 支付宝
      • 微信
      • QQ

      感谢一直支持本站的所有人!

      单栏布局 侧栏位置: