这篇文章主要围绕Java中的字符流进行介绍,包括字符输入流、字符输出流以及处理流异常的几种方式。文中的示例代码讲解详细,感兴趣的可以了解一下
一、字符流的出现
中文在GBK中占有两个字节,在utf-8中占有三个字节(即需要三个字节才能组成一个中文字),字节流读取中文时由于编码集的不同,字节流读取中文也比较麻烦,从而出现了字符流
字符流也在java.io包下
二、字符输入流Reader
①、是一个接口类
②、里面提供了一些共性的方法,供子类使用
方法 | 描述 |
---|---|
int read() | 读取单个字符并返回 |
int read(char[] c) | 一次性读取多个字符,将数据放入数组 |
void close() | 释放资源 |
三、文件字符输入流 FileReader
①、FileReader extends InputStreamReader extends Reader
②、构造方法
FileReader(String filename)
FileReader(File file)
参数:读取文件的数据源
作用:创建FileReader对象、把FileReader对象指向要读取的文件
③、步骤
1、创建FileReader对象并绑定数据源
2、使用对象的read方法读取数据
3、释放资源
④、代码编程(读取单个字符)
import java.io.FileReader;
import java.io.IOException;
public class ReaderTest {
public static void main(String[] args) {
try {
// 1、创建FileReader对象
FileReader fr = new FileReader("E:\\JavaCode\\JavaSE\\Day8-24\\src\\a.txt");
// 2、调用read方法
int len = 0;
while ((len = fr.read())!=-1){
System.out.println((char)len);
}
// 3、释放资源
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
⑤、代码编程(一次性读取多个字符)
try {
// 1、创建FileReader对象
FileReader fr = new FileReader("E:\\JavaCode\\JavaSE\\Day8-24\\src\\a.txt");
// 2、调用read方法
char[] c = new char[1024];
int len = 0;
while ((len = fr.read(c))!=-1){
System.out.println(new String(c,0,len));
}
// 3、释放资源
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
四、字符输出流 Writer
共性的成员方法
方法 | 介绍 |
---|---|
void write(int c) | 写入单个字符 |
void write(char[] c) | 写入字符数组 |
abstract void write(char[] c,int off,int len) | 写入字符数组的某一部分,off为数组的开始索引,len为写入的字符个数 |
void write(String str) | 写入字符串 |
void write(String str,int off,int len) | 写入字符串的某一部分,off为字符开始索引,len为写的字符个数 |
void flush() | 刷新该流的缓冲 |
void close() | 释放资源 |
五、文件字符输出流 FileWriter
①、FileWriter extends OutputStreamWriter extends Writer
②、构造方法
方法 | 介绍 |
---|---|
FileWriter (File file) | 根据给定的file对象构造一个FileWriter对象 |
FileWriter (String filename) | 根据给定 的文件名构造一个FileWriter对象 |
参数:写入数据的目的地
③、使用步骤
1、创建FileWriter对象,构造方法中绑定要写入数据的目的地
2、使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)
3、使用FileWriter中的方法flush,把内存缓冲区中的数据刷新到文件中(必须有这一步)
4、释放资源
④、代码描述
import java.io.FileWriter;
import java.io.IOException;
public class WriterTest {
public static void main(String[] args) {
try {
// 1、创建对象
FileWriter fw = new FileWriter("E:\\JavaCode\\JavaSE\\Day8-24\\src\\a.txt",true);
// 2、写入数据
fw.write("好么");
// 3、刷新
fw.flush();
// 4、释放资源
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
六、close()和flush()的区别
close()释放资源后不能够再使用流进行相关的操作
flush()刷新后还能够再操作
七、换行和续写
与字节流中的换行和续写一致
续写:
在使用构造函数的时候传入两个参数,第一个参数是文件的路径,第二个参数是是否续写(为true表示续写false则表示不续写直接覆盖)
换行:
在Windows系统中换行符号为 \r\n
在linux系统中换行符号为 /n
在Mac系统中换行符号为 /r
八、使用try-catch-finally处理流异常
try{
可能会产出异常的代码
}catch(异常类变量 变量名){
异常的处理逻辑
}finally{
一定会执行的代码
资源释放
}
今天只进行简单的介绍,后续会专门出一期jdk7和jdk9中处理流异常的对比
到此这篇关于Java IO流之字符流的使用详解的文章就介绍到这了,更多相关Java字符流内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:Java IO流之字符流的使用详解
基础教程推荐
- Java并发编程进阶之线程控制篇 2023-03-07
- springboot自定义starter方法及注解实例 2023-03-31
- java基础知识之FileInputStream流的使用 2023-08-11
- java实现多人聊天系统 2023-05-19
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- Java实现线程插队的示例代码 2022-09-03
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- Java数据结构之对象比较详解 2023-03-07
- Java实现查找文件和替换文件内容 2023-04-06
- Java文件管理操作的知识点整理 2023-05-19