java 输入输出IO流 字符流 FileWriter FileReader
2024-09-05 03:27:51
为什么要使用字符流
当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。
Writer
Writer抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法。
- void write(int c) 写入单个字符。
- void write(char[] cbuf) 写入字符数组。
- abstract void write(char[] cbuf, int off, int len) 写入字符数组的一部分,off表示数组的开始索引,len表示写的字符个数。
- void write(String str) 写入字符串。
- void write(String str, int off, int len) 写入字符串的某一部分,off表示字符串的开始索引,len写的字符个数。
- void flush() 刷新该流的缓冲。
- void close() 关闭此流,但要先刷新它。
1、FileWriter
FileWriter 类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。
构造方法
- FileWriter(File file) : 创建一个新的 FileWriter,给定要读取的File对象象。
- FileWriter(String fileName) : 创建一个新的 FileWriter,给定要读取的文件的名称。
Reader
Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法。
- public void close() :关闭此流并释放与此流相关联的任何系统资源。
- public int read() : 从输入流读取一个字符。如果读取到最后返回-1
- public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。返回的是读取的长度。如果读取到最后返回-1
2,FileReader
FileReader类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。
构造方法
- FileReader(File file) : 创建一个新的 FileReader ,给定要读取的File对象。
- FileReader(String fileName) : 创建一个新的 FileReader ,给定要读取的文件的名称
Reader常用方法:
- 1,读取单个字符 int read():每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回 -1
- 2,使用字符数组读取数据,int read(char[] cbuf) ,每次读取b的长度个字符到数组中,返回读取到的有效字符个数,读取到末尾时,返回 -1
示例读写:写
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer; /**
* @ClassName WriterStringToFile
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/17.
*/
public class WriterStringToFile {
public static void main(String[] args) throws IOException {
String fileFath = "输入输出文件读写/src/test/output/writerOut.txt";
Writer writer = new FileWriter(fileFath);
writer.write(97);//写入字符编码
writer.write('b'); //写入字符
char[] chars = {'e','f'};
writer.write(chars);
String text = "剑门关-V哥\n" +
"北望剑阁一线天,\n" +
"遥想翼德战关前。\n" +
"纵使王朝风云变,\n" +
"雄关笑傲数千年。";
writer.write(text);
// writer.flush();
writer.close();
}
}
示例读写:读
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/**
* @ClassName ReaderStringFromFile
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/17.
*/
public class ReaderStringFromFile {
public static void main(String[] args) throws IOException {
String srcPath = "输入输出文件读写/src/test/output/writerOut.txt";
Reader fileReader = new FileReader(srcPath);
StringBuffer text = new StringBuffer();
char[] characters = new char[1024];
int length;
while ((length = fileReader.read(characters)) != -1) {
// System.out.println( characters);
text.append(characters,0,length);
System.out.println("读取到字符个数:" + length);
}
fileReader.close(); //关闭字符流
System.out.println(text);
}
}
最新文章
- JavaScript中Promises/A+规范的实现
- DOM0级事件处理和DOM2级事件处理
- iOS开发 - AVPlayer实现流音频边播边存
- Eclipse的模板设置代码
- 【皇甫】☀亲爱的~help me
- ant design 自定义表单验证大全
- n条直线的最多交点
- Android 常规任务的高度【schedule】与【scheduleAtFixedRate】差额
- [osg]osg显示中文信息
- POJ 3128 Leonardo's Notebook [置换群]
- [BZOJ1006] [HNOI2008] 神奇的国度 (弦图)
- WebGL three.js学习笔记 使用粒子系统模拟时空隧道(虫洞)
- leetcode刷题——一些算法技巧总结2.0
- 三方面搞定http协议之“请求方法”
- Linux 安装MongoDB 并设置防火墙,使用远程客户端访问
- OpenStack 云主机深入了解(十四)
- MySQL中表复制:create table like 与 create table as select
- 杂项:NoSQL
- [剑指Offer] 64.滑动窗口的最大值
- redis三种连接方式
热门文章
- mybatis新增账号并且返回主键id
- maven插件慢的解决方案
- jmeter中执行kafka topic指令
- Codeforces Round #683 (Div. 1) Solution
- clickhouse使用的一点总结
- 【R读取报错】解决: Can't bind data because some arguments have the same name
- 5.Maximum Product Subarray-Leetcode
- 日常Java 2021/11/13
- 面试 Java 后端开发的感受
- ython学习笔记(接口自动化框架 V2.0)