Java基础笔记29-字符流
1.1 字符流介绍
- 字符流包含两大抽象类: 读取流 Reader, 写入流 Writer
- Reader
- 常用实现子类:FileReader
- 常用方法:read()
- Writer
- 常用实现子类:FileWriter
- 常用方法:writer
代码示例:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class CharacterStreamDemo {
public static void main(String[] args) throws IOException {
readerMethod();
}
/**
* 字符流写功能 Writer
* @throws IOException
*/
public static void writerMethod() throws IOException {
//创建一个Writer对象
Writer writer = new FileWriter("E:/WWWW.txt",true);
//写入数字,对应的也是ASCII值,超出ASCII表的数值显示为?,想写入数字可以将数字转为字符串
writer.write(97);
writer.write("197");
//写入字符串可以直接使用字符串,不用再转换类型
writer.write("你好");
//使用字符流写入时,要求要有刷新流flush()或关闭流close(),流关闭后不能再使用流
writer.flush();
writer.close();
}
/**
* 字符流读取功能 Reader
* @throws IOException
*/
public static void readerMethod() throws IOException {
Reader reader = new FileReader("E:/WWWW.txt");
//read(char[] c)接收字符数组类型的参数,如果不写参数,则是读取一个字符,返回int型数据
/*int result = reader.read();
System.out.println((char)result);*/
//使用char[]来读取信息
char[] chars = new char[1024];
while(reader.read(chars)!=-1) {
System.out.println(new String(chars));
}
reader.close();
}
}
1.2 字符流缓冲对象
-
BufferedWriter 字符流缓冲对象 写入流
-
BufferedReader 字符流缓冲对象 读取流
-
在对字符串及文本进行读取或写入操作时,使用字符流及其缓冲对象,读取时可以避免乱码及空间浪费问题,写入时也更高效。
代码示例:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
/**
* BufferedReader BufferedWriter
* 字符缓冲流对象
*
*/
public class BufferedDemo {
public static void main(String[] args) throws IOException {
bufferedWriterMethod();
}
/**
* 使用缓冲流进行写数据操作
* @throws IOException
*/
public static void bufferedWriterMethod() throws IOException {
Writer writer = new FileWriter("E:/buffered.txt");
BufferedWriter bw = new BufferedWriter(writer);
//写入数据
bw.write("你好");
bw.write("\r\n");
bw.write("hello");
bw.write("97");
bw.write(97);
//关闭流,倒着关闭,后写的先关闭
bw.close();
writer.close();
}
/**
* 字符缓冲流 读取方法 BufferedReader
* @throws IOException
*/
public static void bufferedReaderMethod() throws IOException {
Reader reader = new FileReader("E:/buffered.txt");
BufferedReader br = new BufferedReader(reader);
//读取单个字符
//int result = br.read();
//System.out.println((char)result);
//按字符数组来读
/*char[] chars = new char[1024];
while(br.read(chars)!=-1) {
System.out.println(new String(chars));
}*/
//按行读取 readline()返回字符串
//String strLine = br.readLine();
//System.out.println(strLine);
String strLine = null;
while((strLine = br.readLine())!=null) {
System.out.println(strLine);
}
br.close();
reader.close();
}
}
1.3 字符串缓冲对象
-
StringBuilder 线程不安全,效率高,可变变量
-
StringBuffer 线程安全,效率低,可变变量
-
StringBuilder 设计用作简易替换为 StringBuffer 在正在使用由单个线程字符串缓冲区的地方(如通常是这种情况)。 在可能的情况下,建议使用这个类别优先于StringBuffer,因为它在大多数实现中将更快。
代码示例:
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class StrbuMethod {
public static void main(String[] args) throws IOException {
readerMethod2();
}
/**
* 字符读取
* 使用字符串缓冲对象 StringBuilder
* @throws IOException
*/
public static void readerMethod() throws IOException {
Reader reader = new FileReader("E:/WWWW.txt");
//使用字符数组来规定读取数量
char[] cre = new char[1024];
//使用字符串缓冲变量StringBuilder来接收字符串
StringBuilder sb = new StringBuilder();
//使用循环将读取到的字符串添加到字符串缓冲变量中
while(reader.read(cre)!=-1) {
//使用append(char[] c)来将字符数组添加到字符串缓冲变量中
sb.append(cre);
}
//输出字符串缓冲变量
System.out.println(sb.toString());
reader.close();
}
/**
* 字符读取
* 使用字符串缓冲对象 StringBuffer
* @throws IOException
*/
public static void readerMethod2() throws IOException {
Reader reader = new FileReader("E:/WWWW.txt");
//使用字符数组来规定读取数量
char[] cre = new char[1024];
//使用字符串缓冲变量StringBuffer来接收字符串
StringBuffer sb = new StringBuffer();
//使用循环将读取到的字符串添加到字符串缓冲变量中
while(reader.read(cre)!=-1) {
//使用append(char[] c)来将字符数组添加到字符串缓冲变量中
sb.append(cre);
}
//输出字符串缓冲变量
System.out.println(sb.toString());
reader.close();
}
}