
一篇文章带你搞定 Java 中字符流的基本操作(Write / Read)
发布日期:2021-05-07 19:39:40
浏览次数:10
分类:精选文章
本文共 2544 字,大约阅读时间需要 8 分钟。
Java 字符流操作详解
字符流在Java程序中用于处理文本数据的读取和写入,Writer和Reader类为字符流提供了基本操作接口。本文将详细介绍Writer和Reader的使用方法,以及字节流与字符流的区别。
一、字符输出流 Writer
Writer类是Java用于字符流输出的核心类,主要用于向文件或其他输出设备中写入文本数据。
1. 向文件中写入数据
使用Writer类操作文件,流程与字节流操作类似,但更加简便。
import java.io.File;import java.io.FileWriter;public class Root { public static void main(String[] args) throws Exception { File f = new File("D:" + File.separator + "test.txt"); FileWriter out = new FileWriter(f); String str = "Hello World !!!"; out.write(str); out.close(); }}
2. 使用 FileWriter 追加文件内容
FileWriter支持动态追加文件内容,可通过第二个参数true
开启追加模式。
public class Root { public static void main(String[] args) throws Exception { File f = new File("D:" + File.separator + "test.txt"); FileWriter out = new FileWriter(f, true); String str = "\r\n Java Hello World !!!"; out.write(str); out.close(); }}
二、字符输入流 Reader
Reader类用于从字符流中读取文本数据,主要用于文件的字符读取操作。
1. 从文件中读取内容
使用Reader类可以直接读取字符,适用于文本文件的处理。
import java.io.File;import java.io.FileReader;public class Test { public static void main(String[] args) throws Exception { File f = new File("D:" + File.separator + "test.txt"); FileReader reader = new FileReader(f); char[] c = new char[1024]; int len = reader.read(c); System.out.println("内容为:" + new String(c, 0, len)); reader.close(); }}
2. 使用循环的方式读取内容
当不知道文件长度时,可以使用循环读取字符。
char[] c = new char[1024];int len = 0;int temp = 0;while ((temp = reader.read()) != -1) { c[len++] = (char) temp;}System.out.println("内容为:" + new String(c, 0, len));reader.close();
三、字节流与字符流的区别
1. 缓冲区的使用
字符流在读取或写入时会使用内置缓冲区,提高读写效率,而字节流直接操作文件,不使用缓冲区。
2. 关闭操作的影响
- 字节流:关闭后仍会将缓冲区内容写入文件。
- 字符流:关闭后不会自动写入缓冲区内容,必须手动flush。
3. 适用场景
- 字节流:适用于处理非文本文件(如图片、音视频等),文件操作直接基于字节。
- 字符流:适用于处理文本文件,提供更高级别的操作接口。
四、文件复制方法
1. 边读边写方式
这种方法适用于大文件复制,避免占用过多内存。
import java.io.*;public class Copy { public static void main(String[] args) throws Exception { if (args.length != 2) { System.out.println("输入的参数不正确!"); System.exit(1); } File f1 = new File(args[0]); File f2 = new File(args[1]); if (!f1.exists()) { System.out.println("源文件不存在!"); System.exit(1); } InputStream input = new FileInputStream(f1); OutputStream out = new FileOutputStream(f2); while ((temp = input.read()) != -1) { out.write(temp); } System.out.println("复制完成"); input.close(); out.close(); }}
通过以上方法,可以高效地完成文件复制任务。字符流的边读边写方式在处理大文件时表现更优,避免了内存过载问题。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年03月24日 20时10分16秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
事务到底是隔离的还是不隔离的?
2019-03-04
SpringMVC的Model对象的使用
2019-03-04
文本读取和csv文件生成工具类的编写
2019-03-04
@Import注解---导入资源
2019-03-04
Leetcode 面试题 08.04. 幂集(DAY 103) ---- 回溯算法学习期
2019-03-04
重读&笔记系列-《Linux多线程服务端编程》第一章
2019-03-04
解决ubuntu在虚拟机(VMware)环境下不能联网的问题
2019-03-04
LeetCode - 字符串相乘
2019-03-04
C# 适配器模式
2019-03-04
二分查找与插入排序的结合使用
2019-03-04
892 三维形体的表面积(分析)
2019-03-04
40. 组合总和 II(dfs、set去重)
2019-03-04
16 最接近的三数之和(排序、双指针)
2019-03-04
1333 餐厅过滤器(treemap映射)
2019-03-04
python中的all函数
2019-03-04
1137 第 N 个泰波那契数(迭代、记忆性递归)
2019-03-04
279 完全平方数(dfs)
2019-03-04
279 完全平方数(bfs)
2019-03-04
865 具有所有最深结点的最小子树(递归)
2019-03-04
738 单调递增的数字(找出逆序的位置)
2019-03-04