java io系列22之 FileReader和FileWriter

简介: FileReader 是用于读取字符流的类,它继承于InputStreamReader。要读取原始字节流,请考虑使用 FileInputStream。FileWriter 是用于写入字符流的类,它继承于OutputStreamWriter。

FileReader 是用于读取字符流的类,它继承于InputStreamReader。要读取原始字节流,请考虑使用 FileInputStream。
FileWriter 是用于写入字符流的类,它继承于OutputStreamWriter。要写入原始字节流,请考虑使用 FileOutputStream。

转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_22.html

更多内容请参考:java io系列01之 "目录"

 

FileReader和FileWriter源码分析

1. FileReader 源码(基于jdk1.7.40)

复制代码
 1 package java.io;
 2 
 3 public class FileReader extends InputStreamReader {  4  5 public FileReader(String fileName) throws FileNotFoundException {  6 super(new FileInputStream(fil java io系列21之 InputStreamReader和OutputStreamWritereName));  7  }  8  9 public FileReader(File file) throws FileNotFoundException { 10 super(new FileInputStream(file)); 11  } 12 13 public FileReader(FileDescriptor fd) { 14 super(new FileInputStream(fd)); 15  } 16 }
复制代码

从中,我们可以看出FileReader是基于InputStreamReader实现的。 

2. FileWriter 源码(基于jdk1.7.40)

复制代码
 1 package java.io;
 2 
 3 public class FileWriter extends OutputStreamWriter {  4  5 public FileWriter(String fileName) throws IOException {  6 super(new FileOutputStream(fileName));  7  }  8  9 public FileWriter(String fileName, boolean append) throws IOException { 10 super(new FileOutputStream(fileName, append)); 11  } 12 13 public FileWriter(File file) throws IOException { 14 super(new FileOutputStream(file)); 15  } 16 17 public FileWriter(File file, boolean append) throws IOException { 18 super(new FileOutputStream(file, append)); 19  } 20 21 public FileWriter(FileDescriptor fd) { 22 super(new FileOutputStream(fd)); 23  } 24 }
复制代码

从中,我们可以看出FileWriter是基于OutputStreamWriter实现的。


示例程序

复制代码
 1 import java.io.File;
 2 import java.io.FileInputStream;  3 import java.io.FileOutputStream;  4 import java.io.FileWriter;;  5 import java.io.FileReader;  6 import java.io.IOException;  7  8 /**  9  * FileReader 和 FileWriter 测试程序 10  * 11  * @author skywang 12 */ 13 public class FileReaderWriterTest { 14 15 private static final String FileName = "file.txt"; 16 private static final String CharsetName = "utf-8"; 17 18 public static void main(String[] args) { 19  testWrite(); 20  testRead(); 21  } 22 23 /** 24  * OutputStreamWriter 演示函数 25  * 26 */ 27 private static void testWrite() { 28 try { 29 // 创建文件“file.txt”对应File对象 30 File file = new File(FileName); 31 // 创建FileOutputStream对应FileWriter:将字节流转换为字符流,即写入out1的数据会自动由字节转换为字符。 32 FileWriter out1 = new FileWriter(file); 33 // 写入10个汉字 34 out1.write("字节流转为字符流示例"); 35 // 向“文件中”写入"0123456789"+换行符 36 out1.write("0123456789\n"); 37 38  out1.close(); 39 40 } catch(IOException e) { 41  e.printStackTrace(); 42  } 43  } 44 45 /** 46  * InputStreamReader 演示程序 47 */ 48 private static void testRead() { 49 try { 50 // 方法1:新建FileInputStream对象 51 // 新建文件“file.txt”对应File对象 52 File file = new File(FileName); 53 FileReader in1 = new FileReader(file); 54 55 // 测试read(),从中读取一个字符 56 char c1 = (char)in1.read(); 57 System.out.println("c1="+c1); 58 59 // 测试skip(long byteCount),跳过4个字符 60 in1.skip(6); 61 62 // 测试read(char[] cbuf, int off, int len) 63 char[] buf = new char[10]; 64 in1.read(buf, 0, buf.length); 65 System.out.println("buf="+(new String(buf))); 66 67  in1.close(); 68 } catch(IOException e) { 69  e.printStackTrace(); 70  } 71  } 72 }
复制代码

运行结果
c1=字
buf=流示例0123456

相关文章
|
1月前
|
存储 Java 数据处理
|
1月前
|
Java API
java中IO与NIO有什么不同
java中IO与NIO有什么不同
|
14天前
|
存储 Java
探索 Java IO 流的多种实现方式
【4月更文挑战第4天】Java IO 流是处理输入输出的关键组件,包括文件流(FileInputStream/FileOutputStream)、字符流(FileReader/FileWriter)、缓冲区流(BufferedInputStream/BufferedOutputStream)、转换流(InputStreamReader/OutputStreamWriter)、数据流(DataInputStream/DataOutputStream)、对象流(ObjectInputStream/ObjectOutputStream)、随机访问文件流(RandomAccessFile)和管道流。
|
26天前
|
Java 关系型数据库 MySQL
Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
【2月更文挑战第33天】Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
46 2
|
1月前
|
Java
|
2月前
|
Java 数据处理
如何玩转Java IO?
【2月更文挑战第7天】
218 0
如何玩转Java IO?
|
3月前
|
存储 Java 数据安全/隐私保护
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
|
3月前
|
存储 移动开发 Java
从零开始学习 Java:简单易懂的入门指南之IO字节流(三十)
从零开始学习 Java:简单易懂的入门指南之IO字节流(三十)
|
3月前
|
存储 网络协议 Java
Java学习—IO流
Java学习—IO流
|
3月前
|
存储 Java Android开发
IO流:java中解码和编码出现乱码说明及代码实现
IO流:java中解码和编码出现乱码说明及代码实现