Java字符流
Posted 超霸霸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java字符流相关的知识,希望对你有一定的参考价值。
字符流
一、什么是字符流
当使用字节流读取文件时,遇到中文字符时可能会出错,因为一个中文字符可能占用多个字节存储。所有Java提供了字符流类,以字符为单位读写数据,专门用于处理文本文件
二、FileReader
类
-
java.io.FileReader
类是读取字符文件的遍历类,构造时使用系统默认的字符编码和默认字节缓冲区(Windows系统的中文默认编码是GBK,IDEA中是UTF-8) -
需要的包名:
java.io.FileReader
-
构造方法:
-
FileReader
类的方法:
-
实例:
- 创建一个
FileReader
对象
import java.io.File; import java.io.FileReader; import java.io.IOException; public class test { public static void main(String[] args) throws IOException { //使用File对象创建 File file=new File("src\\\\com\\\\chao\\\\a.txt"); FileReader fr1=new FileReader(file); //使用文件名创建 FileReader fr2=new FileReader("src\\\\com\\\\chao\\\\a.txt"); fr1.close(); fr2.close(); } }
- 使用
read()
方法输出文件内容1.0:
/* int read():读取单个字符并返回 */ import java.io.FileReader; import java.io.IOException; public class test { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("src\\\\com\\\\chao\\\\a.txt"); int len = 0; while ((len = fr.read()) != -1) { System.out.println(len); } fr.close(); } }
输出:
65 66 67
a.txt
内容:ABC
- 使用
read()
方法输出文件内容2.0:
import java.io.FileReader; import java.io.IOException; public class test { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("src\\\\com\\\\chao\\\\a.txt"); int len = 0; while ((len = fr.read()) != -1) { System.out.println((char) len); } fr.close(); } }
输出:
A B C
a.txt
内容:ABC
- 使用
read()
方法输出文件内容3.0:
/* int read(char[] cbuf)一次读取多个字符,将字符写入数组 */ import java.io.FileReader; import java.io.IOException; public class test { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("src\\\\com\\\\chao\\\\a.txt"); char[] cs = new char[1024]; //存储读到的多个字符 int len = 0; //记录每次读取到的有效字符个数 while ((len = fr.read(cs)) != -1) { System.out.println(new String(cs, 0, len)); } fr.close(); } }
输出:
ABC
a.txt
内容:ABC
- 创建一个
三、FileWriter
类
-
需要的包名:
java.io.FileWriter
-
构造方法:
-
FileWriter
类的方法:
-
实例:
- 创建一个
FileWriter
对象,并写入一个字符:
import java.io.FileWriter; import java.io.IOException; public class test { public static void main(String[] args) throws IOException { FileWriter fw=new FileWriter("src\\\\com\\\\chao\\\\a.txt"); fw.write(97); fw.close(); } }
a.txt
内容:a
- 使用
flush()
刷新:
/* flush:刷新缓冲区,流对象可以继续使用 */ import java.io.FileWriter; import java.io.IOException; public class test { public static void main(String[] args) throws IOException { FileWriter fw=new FileWriter("src\\\\com\\\\chao\\\\a.txt"); fw.write(97); //写入单个字符 fw.flush(); //把内存缓冲区中的数据刷新到文件中 fw.write(98); //刷新之后可以继续使用 fw.close(); //释放资源(会先把内存缓冲区中的数据刷新到文件中) } }
- 写入字符数组:
import java.io.FileWriter; import java.io.IOException; public class test { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("src\\\\com\\\\chao\\\\a.txt"); char[] c = {'a', 'b', 'c'}; fw.write(c); fw.write(c,1,2); fw.close(); } }
a.txt
内容:abcbc
- 写入字符串:
import java.io.FileWriter; import java.io.IOException; public class test { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("src\\\\com\\\\chao\\\\a.txt"); //一、将字符串转换为字节数组 char[] c = "我很强".toCharArray(); fw.write(c); fw.write(c, 1, 2); //二、直接写入 fw.write("我无敌,你随意"); fw.write("我无敌,你随意", 1, 3); fw.close(); } }
a.txt
内容:我很强很强我无敌,你随意无敌,
- 追加内容:
import java.io.FileWriter; import java.io.IOException; public class test { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("src\\\\com\\\\chao\\\\a.txt", true); fw.write("时间是真理的孩子"); fw.close(); } }
a.txt
内容:我无敌,你随意无敌,时间是真理的孩子
- 创建一个
以上是关于Java字符流的主要内容,如果未能解决你的问题,请参考以下文章
片段(Java) | 机试题+算法思路+考点+代码解析 2023
通过 Java 正则表达式提取 semver 版本字符串的片段
JAVA IO流相关代码(字符流:FileWriter类,FileReader类,BufferedReader类,BufferedWriter类)