前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Java IO]03_字符流

[Java IO]03_字符流

作者头像
静默虚空
发布2018-01-05 15:22:32
4220
发布2018-01-05 15:22:32
举报

Java程序中,一个字符等于两个字节。 Reader 和 Writer 两个就是专门用于操作字符流的类。

Writer

Writer是一个字符流的抽象类。 

它的定义如下:

代码语言:txt
复制
public abstract class Writer implements Appendable, Closeable, Flushable

直接子类

BufferedWriter, 

CharArrayWriter, 

FilterWriter, 

OutputStreamWriter, 

PipedWriter, 

PrintWriter, 

StringWriter

详细细节可以参考Java API文档。

Reader

Reader是读取字符流的抽象类。

它的定义如下:

代码语言:txt
复制
public abstract class Reader implements Readable, Closeable

直接子类

BufferedReader, 

CharArrayReader, 

FilterReader, 

InputStreamReader, 

PipedReader, 

StringReader

字节流 vs 字符流

字节流和字符流的使用方式非常相似,都有read()、write()、close()、flush()这样的方法。

它们的有以下几点:

区别

(1)操作数据

字节流

主要操作byte类型的数据。主要核心类是InputStream类和OutputStream类。

字符流

主要操作字符,一个字符等于两个字节。主要核心类是Reader类和Writer类。

(2)是否使用缓冲区

字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的。

字符流在操作时是使用了缓冲区,通过缓冲区再操作文件。

(3)字节流和字符流哪个好

所有的文件在硬盘或传输时都是以

字节方式保存的,例如图片,影音文件等都是按字节方式存储的。

字符流无法读写这些文件。所以,除了纯文本数据文件使用字符流以外,其他文件类型都应该使用字节流方式。

文件字符流

文件字符流有两个类:FileWriter 和 FileReader。

它们提供了方法将字符写入到文件和将数据以字符形式从文件中读取出来。

一般情形下,文件字节流操作遵循以下几个步骤: (1)使用File类绑定一个文件。 (2)把File对象绑定到流对象上。 (3)进行读、写操作。 (4)关闭输入、输出。

FileWriter

例 向文件中写入数据

代码语言:txt
复制
import java.io.File;
import java.io.Writer;
import java.io.FileWriter;

public class WriterDemo {
 public static void main(String args[]) throws Exception { // 异常抛出,不处理
 // 第1步、使用File类找到一个文件
        File f = new File("d:" + File.separator + "test.txt"); // 声明File对象
 
 // 第2步、通过子类实例化父类对象
        Writer out = new FileWriter(f);
 // Writer out = new FileWriter(f, true); // 追加内容方式
 
 // 第3步、进行写操作
        String str = "Hello World!!!\r\n";
        out.write(str); // 将内容输出
 
 // 第4步、关闭输出流
        out.close();
    }
};

FileReader

例 从文件中读取内容

代码语言:txt
复制
import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.io.FileReader;

public class ReaderDemo01 {
 // 将所有内容直接读取到数组中
 public static int read1(Reader input, char[] c) throws IOException {
 int len = input.read(c); // 读取内容
 return len;
    }

 // 每次读取一个字符,直到遇到字符值为-1,表示读文件结束
 public static int read2(Reader input, char[] c) throws IOException {
 int temp = 0; // 接收每一个内容
 int len = 0; // 读取内容
 while ((temp = input.read()) != -1) {
 // 如果不是-1就表示还有内容,可以继续读取
            c[len] = (char) temp;
            len++;
        }
 return len;
    }

 public static void main(String args[]) throws Exception {
 // 第1步、使用File类找到一个文件
        File f = new File("d:" + File.separator + "test.txt");

 // 第2步、通过子类实例化父类对象
        Reader input = new FileReader(f);

 // 第3步、进行读操作
 char c[] = new char[1024];
//        int len = read1(input, c);
 int len = read2(input, c);

 // 第4步、关闭输出流
        input.close();
        System.out.println("内容为:" + new String(c, 0, len)); // 把字符数组变为字符串输出
    }
};

参考资料

《Java编程思想》

《Java开发实战经典》 

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-05-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Writer
  • Reader
  • 字节流 vs 字符流
  • 文件字符流
    • FileWriter
      • FileReader
      • 参考资料
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档