Java-Java I/O 字节流之BufferedReader/BufferedWriter
- 概述
- Reader InputStreamReader FileReader and BufferedReader
- Writer OutputStreamWriter FileWriter and BufferedWriter
- Character Encoding and Charset
- 示例
- BufferedReader
- BufferedWriter
概述
本篇博文主要介绍 如何使用java.io包中提供的类读取和写入文本(或字符)文件
Reader, InputStreamReader, FileReader and BufferedReader
Reader是读取字符流的抽象类。 它实现以下基本方法:
- read(): reads a single character.
- read(char[]): reads an array of characters.
- skip(long): skips some characters.
- close(): closes the stream.
InputStreamReader是从字节流到字符流的桥梁。 它使用指定的字符集将字节转换为字符。 字符集可以是操作系统的默认字符编码,也可以在创建InputStreamReader时显式指定。
FileReader是使用操作系统的默认字符编码读取文本文件的便捷类。
BufferedReader从字符流中读取文本(字符被缓冲以避免从基础流中经常读取),并提供了一种方便的阅读文本行readLine()的方法。
我们来看下Reader的继承关系
Writer, OutputStreamWriter, FileWriter and BufferedWriter
Writer是写入字符流的抽象类。 它实现以下基本方法:
- write(int): writes a single character.
- write(char[]): writes an array of characters.
- write(String): writes a string.
- close(): closes the stream.
OutputStreamWriter是从字节流到字符流的桥梁。 使用指定的字符集将字符编码为字节。 字符集可以是操作系统的默认字符编码,也可以在创建OutputStreamWriter时显式指定。
FileWriter是使用操作系统的默认字符编码编写文本文件的便捷类。
BufferedWriter有效地将文本写入字符流(字符,数组和字符串被缓冲以避免频繁写入底层流),并为写入行分隔符newLine()提供了一种方便的方法。
Character Encoding and Charset
当构建reader 或者 writer 对象时,使用操作系统的默认字符编码
FileReader fileReader = new FileReader("myFile.txt");FileWriter fileWriter = new FileWriter("YourFile.txt");
所以,如果我们要使用特定的字符集,请改用InputStreamReader或OutputStreamWriter
InputStreamReader reader = new InputStreamReader(new FileInputStream("MyFile.txt"), "UTF-16");
这将创建一个具有Unicode字符编码UTF-16的InputStreamReader
构造具有UTF-8编码OutputStreamWriter
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("MyFile.txt"), "UTF-8");
如果我们想使用BufferedReader,只需将InputStreamReader包装在其中,例如:
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("MyFile.txt"), "UTF-8"));
同样的 BufferedWriter 如下
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("MyFile.txt"), "UTF-16");BufferedWriter bufferedWriter = new BufferedWriter(osw);
示例
BufferedReader
示例一: 从文件MyFile.txt读取单个字符,并将所有字符打印到输出控制台:
@Testpublic void test() {FileReader fileReader = null;try {fileReader = new FileReader(new File("D:/xgj.txt"));int character;while ((character = fileReader.read()) != -1) {System.out.println((char) character);}// close streamfileReader.close();} catch (IOException e) {e.printStackTrace();}}
示例二 读取文本文件,假设编码为UTF-8:
@Testpublic void test() {InputStreamReader in;try {in = new InputStreamReader(new FileInputStream(new File("D:/xgj.txt")), "UTF-8");int character;while ((character = in.read()) != -1) {System.out.println((char) character);}// close streamin.close();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
示例三 使用BufferedReader逐行读取文本文件(这是最有效和首选的方式):
@Testpublic void test() {BufferedReader bufferedReader;try {bufferedReader = new BufferedReader(new FileReader(new File("D:/xgj.txt")));String line;while ((line = bufferedReader.readLine()) != null) {System.out.println(line);}// close streambufferedReader.close();} catch (IOException e) {e.printStackTrace();}}
BufferedWriter
使用FileWriter将两个单词“Hello World”和“Good Bye!”写入名为MyFile.txt的文件:
@Testpublic void test() {FileWriter fileWriter;try {// If the second argument is true, then bytes will be written to the// end of the file rather than the beginning.fileWriter = new FileWriter(new File("D:/MyFile.txt"), true);fileWriter.write("Hello World");fileWriter.write("\r\n"); // write new linefileWriter.write("Good Bye!");// close streamfileWriter.close();} catch (IOException e) {e.printStackTrace();}}
请注意,FileWriter默认使用操作系统的默认字符编码。 如果文件不存在将创建一个新的文件,存在则覆盖现有的。
如果要将文本附加到现有文件,请将FileWriter类的构造函数第二个入参true.
如下:
FileWriter writer = new FileWriter("MyFile.txt", true);
示例二 使用一个包含FileWriter的BufferedWriter 来将文本附加到现有文件中:
这是写入文本文件的首选方法,因为BufferedWriter 提供了写入字符流的有效方式。
@Testpublic void test() {BufferedWriter bufferedWriter;try {bufferedWriter = new BufferedWriter(new FileWriter("D:/Myfile.txt", true));bufferedWriter.write("Hello World");bufferedWriter.newLine(); // 分隔符bufferedWriter.write("See You Again!");// close streambufferedWriter.close();} catch (IOException e) {e.printStackTrace();}}
以下示例在写入文件时指定特定字符编码(UTF-8):
@Testpublic void test() {try {FileOutputStream outputStream = new FileOutputStream("D:/MyFile.txt");OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream, "UTF-8");BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);bufferedWriter.write("Hello");bufferedWriter.newLine();bufferedWriter.write("I/O");// close streambufferedWriter.close();} catch (IOException e) {e.printStackTrace();}}
注意:
从Java 7开始,我们可以使用try-with-resources语句简化打开和关闭读写器的代码。 例如:
try (FileReader reader = new FileReader("MyFile.txt")) {int character;while ((character = reader.read()) != -1) {System.out.print((char) character);}
} catch (IOException e) {e.printStackTrace();
}
Java-Java I/O 字节流之BufferedReader/BufferedWriter相关推荐
- java缓冲流,BufferedReader,BufferedWriter 详解
缓冲流,BufferedReader,BufferedWriter 1)BufferedReader,BufferedWriter是更高级的流,二者的源和目的地必须是字符输入流和字符输出流.如果把字符 ...
- java 字符流与字节流区别_JAVA 字符流与字节流的区别
Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 U ...
- java基础 io流 字节流 字符流 节点流 包装流 转换流 缓冲流 对象流 打印流 Properties类
目录 1.概念 2.常用的文件操作 2.1 创建文件 2.2 获取文件相关信息 2.3 目录的操作和文件删除 3. IO流原理及流的分类 3.1 流的分类 4.InputStream 字节输入流 4. ...
- 黑马程序员——Java字符流、字节流IO流
黑马程序员--Java字符流.字节流Io流 ---------------------- <a href="http://www.itheima.com"target=&qu ...
- java的flush方法_Java中的BufferedWriter flush()方法及示例
Java中buffered writer类的flush()方法用于刷新缓冲的writer流中的字符.语法:公共void flush()指定者:此方法由Flushable接口的flush()方法指定.重 ...
- Java 把一个InputStream转换为一个BufferedReader
Java 把一个InputStream转换为一个BufferedReader InputStream inputStream = getResources().getAssets().open(&qu ...
- java字符流和字节流转换_java中字符流和字节流的转换
看到InputStreamReader和OutputStreamWriter的一些说法, 说InputStreamReader是将字节流转换成字符流,而OutputStreamWriter则相反,是将 ...
- [Jmeter]通过批处理调用java,java从CSV动态读取登录的用户名和密码,并将其作为参数组合成字符串,写入外部.bat文件,然后通过Java执行这个外部批处理文件...
问题1:怎样通过批处理调用java代码? 问题2:怎样通过java从CSV文件获取到用户名和密码存入变量? 问题3:怎样将获取到的用户名和密码组合成字符串,写入外部批处理文件? 问题4:怎样在批处理文 ...
- java java se_Java SE 9:尝试资源改进
java java se 发表简要目录: (Post Brief Table of Content:) Introduction介绍 Java SE 7: Try-With-Resources Bas ...
最新文章
- VS.NET 学习方法论
- Java编程基础-变量
- JBox2D和JavaFX:事件与力量
- REVERSE-PRACTICE-BUUCTF-5
- MVC5+EF6 入门完整教程四
- redis相关技能积累
- java comparator_Java 集合排序策略接口 Comparator
- CRC校验 与 模2运算
- 论文学习13Reconstructing the house from the ad: Structured prediction on real estate classifieds(实体关系抽取)
- python进行回归方程显著性检验
- 华为设备配置OSPF的NSSA区域
- c语言 滑窗法_滑窗平均的另一种实现方式
- node_modules删不掉
- Spark面试题及其答案
- pyinstaller包含html文件,pyinstaller打包exe
- E08【选尺码】I'm looking for size 43
- 带你快速入门AXI4总线--汇总篇
- 2021年更新:火爆全网的抖音“蚂蚁牙黑”视频制作实战,附软件
- 2022化工自动化控制仪表考试题及答案
- 【特征工程】词袋模型/TF-IDF模型/词汇表模型的代码实现(文本特征提取)
热门文章
- Linux 下的动态链接库问题
- java post 打开新页面_JAVA后台POST/GET访问方法
- tensorflow就该这么学--4(识别手写数字)
- pytorch 笔记:torchsummary
- 文巾解题 leetcode993. 二叉树的堂兄弟节点
- 见光死怎么办?如何提升用户对网站的好感,提升转化?
- 深度学习核心技术精讲100篇(二十)-如何通过树模型实现梯度提升树(GBDT)+LR,随机森林(RandomForest) +LR
- android引用的java包_Android开发中jar包的创建及引用
- np.expand_dims()介绍
- 深度学习100例-卷积神经网络(CNN)识别眼睛状态 | 第17天