一、Reader
- 用于读取字符流的抽象类。
- 子类必须实现的方法只有 read(char[], int, int) 和 close()。
- 但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能
- 直接已知子类:
- BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader
public abstract class Reader implements Readable, Closeable { /** *读取单个字符。在字符可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。 *作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1 */ public int read() throws IOException{} //将字符读入数组。在某个输入可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞 public int read(char[] cbuf) throws IOException{} //将字符读入数组的某一部分。在某个输入可用、发生 I/O 错误或者到达流的末尾前,此方法一直阻塞 public abstract int read(char[] cbuf, int off, int len) throws IOException; //跳过字符。在某个字符可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞 public long skip(long n) throws IOException{} /** *关闭该流并释放与之关联的所有资源。 *在关闭该流后,再调用 read()、ready()、mark()、reset() 或 skip() 将抛出 IOException。 *关闭以前关闭的流无效。 */ public abstract void close() throws IOException; }
二、InputStreamReader
- InputStreamReader 是字节流通向字符流的桥梁:
- 它使用指定的 charset 读取字节并将其解码为字符。
- 它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
- 每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。
- 要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。
- 为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader
public class InputStreamReader extends Reader { //创建一个使用默认字符集的 InputStreamReader public InputStreamReader(InputStream in){} //创建使用指定字符集的 InputStreamReader public InputStreamReader(InputStream in, String charsetName) throws UnsupportedEncodingException{} //返回此流使用的字符编码的名称。 public String getEncoding(){} //其余方法均继承自Reader和Object }
三、FileReader
- 用来读取字符文件的便捷类。
- 此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。
- 要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。
- FileReader 用于读取字符流。要读取原始字节流,请考虑使用 FileInputStream。
public class FileReader extends InputStreamReader { //在给定从中读取数据的 File 的情况下创建一个新 FileReader public FileReader(File file) throws FileNotFoundException{} //在给定从中读取数据的文件名的情况下创建一个新 FileReader。 public FileReader(String fileName) throws FileNotFoundException{} //其余方法均继承自InputStreamReader }
示例:
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /** * 需求:复制文件 */ public class ReaderTest { public static void main(String[] args) { String resName = "E:/f/code/a.java"; String desName = "E:/a.java"; copy(resName,desName); } public static void copy(String resName,String desName) { FileReader fr = null; FileWriter fw = null; try { fr = new FileReader(resName); fw = new FileWriter(desName); char[] buf = new char[1024]; int num = 0; while((num=fr.read(buf))!=-1) { fw.write(buf); fw.flush(); } System.out.println("复制成功"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ if(fr != null) { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } if(fw != null) { try { fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
相关推荐
`java.io.Reader`是所有字符输入流的超类。它主要用于读取字符数据,通常以Unicode编码(如UTF-8)的形式。这意味着`Reader`能够处理任何由16位字符组成的文本数据,这在处理包含多种语言和特殊字符的文本文件时尤为...
`java.io.Reader`是所有字符输入流的父类。它定义了一些基本方法,如读取单个字符、读取字符数组等。 - `public int read()`:读取单个字符。如果达到文件末尾或流末尾,则返回-1。 - `public int read(char[] cbuf...
在Java中,IO操作主要分为字节流和字符流两大类,分别由`java.io.InputStream`和`java.io.OutputStream`以及`java.io.Reader`和`java.io.Writer`作为基类。字节流处理的是8位的字节,而字符流处理的是16位的Unicode...
- `java.io.Reader`类是所有字符输入流的父类。 - `java.io.Writer`类是所有字符输出流的父类。 接下来,我们将分别介绍几种常用的字符流。 #### 1. FileReader与FileWriter `FileReader`和`FileWriter`是最基本...
Java IO包是Java标准库中的核心组件之一,主要用于处理输入和输出操作。这个包包含了大量类和接口,它们提供了各种输入输出流、字符编码、数据转换以及文件操作等功能。Java IO的设计采用了Decorator模式,使得在不...
- `Reader` 和 `Writer` 是所有字符输入流和输出流的基类。例如,`FileReader` 用于从文件读取字符,`FileWriter` 用于向文件写入字符。 - `BufferedReader` 和 `BufferedWriter` 同样提供缓冲功能,但适用于字符...
- **输入流**(InputStream)用于读取数据,而**输出流**(OutputStream)用于写入数据。这个项目可能使用了FileInputStream和FileOutputStream进行文件操作。 - **字符流**(Reader和Writer)处理文本数据,而**...
字节流又分为输入流和输出流,例如InputStream和OutputStream是字节输入流和输出流的基类。 2. **基本流类**: - `FileInputStream` 和 `FileOutputStream` 用于读取和写入文件。 - `BufferedInputStream` 和 `...
- **Reader**:字符输入流的抽象基类。 - **Writer**:字符输出流的抽象基类。 具体实现包括: - **FileReader/Writer**:用于读取/写入文件的字符流。 - **CharArrayReader/Writer**:用于操作字符数组的输入/...
`Reader`类是所有字符输入流的抽象基类,用于读取字符序列。而`Writer`类则是所有字符输出流的抽象基类,用于写出字符序列。这两个类都是抽象类,不能直接实例化,但提供了许多子类供我们使用,如`InputStreamReader...
同样,`java.io.Reader`代表字符输入流,`java.io.Writer`代表字符输出流。值得注意的是,这四个类都是抽象类,不能直接实例化,需要使用它们的子类来实现具体功能。 在字节流中,`InputStream`类提供了一些基本的...
20. **java.io.Reader**和**java.io.Writer**:所有字符流的基类,用于处理字符数据。 21. **java.io.DataInputStream**和**java.io.DataOutputStream**:用于读写基本数据类型的流。 22. **java.io....
`BufferedReader` 是 `java.io` 匹配中的一个类,它提供了读取文本文件字符的功能。该类通过在字符流之上添加缓冲区来提高读取操作的效率。 #### 2. 构造方法 `BufferedReader` 提供了两个构造方法: - `...
- 字符输入流(Reader):如FileReader,用于读取字符数据,通常用于处理文本文件。 - 字符输出流(Writer):如FileWriter,用于写入字符数据。 - 缓冲字符流(BufferedReader/BufferedWriter):提高读写性能,...
- Reader和Writer是所有字符输入流和输出流的基类。例如FileReader和FileWriter用于读写文本文件。 - BufferedReader和BufferedWriter提供缓冲功能,提高读写效率。过滤字符流,如InputStreamReader和...
Reader 是 Java 中的基础字符输入流,所有的字符输入操作都是基于这个流的。Writer 是 Java 中的基础字符输出流,所有的字符输出操作都是基于这个流的。Reader 和 Writer 又可以分为许多子类来完成字符 IO 功能。 ...
2. 字符输入流 Reader:它是所有字符输入流的父类,用于从源读取字符数据。FileReader 是一个常见的实现,用于从文件中读取字符。 以下是使用 FileWriter 写入字符数据的示例: ```java import java.io.File; ...
- `PushbackReader`: 允许将已读取的字符重新推回到输入流中。 - `LineNumberReader`: 记录读取的行号。 - **Writer 类** - `StringWriter`: 向字符串写入数据。 - `PrintWriter`: 提供了一种方便的方式来打印...
2. 字符流:对于处理文本数据,Java提供了`Reader`和`Writer`作为字符输入流和输出流的基类。` FileReader`和`FileWriter`是它们的典型应用,专用于文件的字符读写。 三、流的方向 Java的IO流分为四种基本类型,...