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

相关文章
|
监控 Java API
现代 Java IO 高性能实践从原理到落地的高效实现路径与实战指南
本文深入解析现代Java高性能IO实践,涵盖异步非阻塞IO、操作系统优化、大文件处理、响应式网络编程与数据库访问,结合Netty、Reactor等技术落地高并发应用,助力构建高效可扩展的IO系统。
450 0
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
451 1
|
Java 测试技术 API
Java IO流(二):文件操作与NIO入门
本文详解Java NIO与传统IO的区别与优势,涵盖Path、Files类、Channel、Buffer、Selector等核心概念,深入讲解文件操作、目录遍历、NIO实战及性能优化技巧,适合处理大文件与高并发场景,助力高效IO编程与面试准备。
|
存储 Java Linux
操作系统层面视角下 Java IO 的演进路径及核心技术变革解析
本文从操作系统层面深入解析Java IO的演进历程,涵盖BIO、NIO、多路复用器及Netty等核心技术。分析各阶段IO模型的原理、优缺点及系统调用机制,探讨Java如何通过底层优化提升并发性能与数据处理效率,全面呈现IO技术的变革路径与发展趋势。
325 3
|
SQL Java 数据库连接
Java IO流(一):字节流与字符流基础
本文全面解析Java IO流,涵盖字节流、字符流及其使用场景,帮助开发者理解IO流分类与用途,掌握文件读写、编码转换、异常处理等核心技术,通过实战案例提升IO编程能力。
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
784 23
|
缓存 网络协议 Java
JAVA网络IO之NIO/BIO
本文介绍了Java网络编程的基础与历史演进,重点阐述了IO和Socket的概念。Java的IO分为设备和接口两部分,通过流、字节、字符等方式实现与外部的交互。
663 0
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
1113 12