目录
文件字符输入流-读字符数据进来
介绍
构造器及常用方法
实例演示
文件字符输出流-写字符数据出去
介绍、构造器及常用方法
实例演示
字符输出流使用时的注意事项
小结
文件字符输入流-读字符数据进来
介绍
FileReader(文件字符输入流)
- 作用:以内存为基准,可以把文件中的数据以字符的形式读入到内存中去。
构造器及常用方法
构造器 | 说明 |
---|---|
public FileReader(File file) | 创建字符输入流管道与源文件接通 |
public FileReader(String pathname) | 创建字符输入流管道与源文件接通 |
方法名称 | 说明 |
---|---|
public int read() | 每次读取一个字符返回,如果发现没有数据可读会返回-1. |
public int read(char[] buffer) | 每次用一个字符数组去读取数据,返回字符数组读取了多少个字符,如果发现没有数据可读会返回-1. |
实例演示
文件Temp.txt的内容如下:
每次读取一个字符
import java.io.FileReader;
import java.io.Reader;
public class FileReaderTest1 {
public static void main(String[] args) {
try (
//1.创建一个文件字符输入流管道与源文件接通
Reader fr = new FileReader("untitled/src/Temp.txt");
){
//2.读取文本文件的内容
int c; //记住每次读取的字符编号
while( (c = fr.read())!= -1 ){
System.out.print((char) c);
}
//每次读取一个字符的形式,性能肯定是比较差的。
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
每次读取多个字符
import java.io.FileReader;
import java.io.Reader;
public class FileReaderTest1 {
public static void main(String[] args) {
try (
//1.创建一个文件字符输入流管道与源文件接通
Reader fr = new FileReader("untitled/src/Temp.txt");
){
//2.读取文本文件的内容
//3.每次读取多个字符
char[] buffer = new char[3];
int len; //记住每次读取了多少个字符
while( (len = fr.read(buffer)) != -1 ){
//读取多少倒出多少
System.out.println(new String(buffer, 0, len));
}
}catch (Exception e){
e.printStackTrace();
}
}
}
文件字符输出流-写字符数据出去
介绍、构造器及常用方法
FileWriter(文件字符输出流)
- 作用:以内存为基准,把内存中的数据以字符的形式写出到文件中去。
构造器 | 说明 |
---|---|
public FileWriter(File file) | 根据文件名创建字节输出流管道与源文件对象接通 |
public FileWriter(String filepath) | 根据文件路径创建字节输出流管道与源文件路径接通 |
public FileWriter(File file, boolean append) | 创建字节输出流管道与源文件对象接通,可追加数据 |
public FileWriter(String filepath, boolean append) | 创建字节输出流管道与源文件路径接通,可追加数据 |
方法名称 | 说明 |
---|---|
void write(int c) | 写一个字符 |
void write(String str) | 写一个字符串 |
void write(String str, int off, int len) | 写一个字符串的一部分 |
void write(char[] cbuf) | 写入一个字符数组 |
void write(char[] cbuf, int off, int len) | 写入字符数组的一部分 |
实例演示
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
public class FileWriterTest1 {
public static void main(String[] args) {
try(
//0.创建一个文件字符输出流管道与目标文件接通
// Writer fw = new FileWriter("HelloWorld/src/Temp.txt");
//追加数据的管道(不会覆盖原数据)
Writer fw = new FileWriter("HelloWorld/src/Temp.txt",true);
){
//1.public void write(int c): 写一个字符出去
fw.write('a');
fw.write(97);
fw.write('零');
//换行
fw.write("\r\n");
//2.public void write(String s):写一个字符串出去
fw.write("我爱你中国abc");
fw.write("\r\n");
//3.public void write(String c,int pos,int len):写字符串的一部分出去
fw.write("你当像鸟飞往你的山",4,5);
fw.write("\r\n");
//4.public void write(char[] buffer):写一个字符数组出去
char[] buffer = {'梦','醒','a','b','c'};
fw.write(buffer);
fw.write("\r\n");
//5.public void write(char[] buffer,int pos,int len):写字符数组的一部分出去
fw.write(buffer,0,2);
fw.write("\r\n");
}catch (Exception e){
e.printStackTrace();
}
}
}
运行之后Temp.txt的内容:
字符输出流使用时的注意事项
- 字符输出流写出数据后,必须刷新流,或者关闭流,写出去的数据才能生效
写出的字符数据会先放到缓冲区里面,而缓冲区位于内存,当缓冲区一次性进行系统的资源调用时,才算真正写出了字符。
所以需要刷新或者关闭流才能使得写出去的数据生效,同时,当缓冲区满时,也会自动取调用系统资源。
方法名称 | 说明 |
---|---|
public void flush() throws IOException | 刷新流,也就是将内存中缓存的数据立即写到文件中去生效 |
public void close() throws IOException | 关闭流的操作,包含了刷新 |
小结
字节流、字符流的使用场景小结
- 字节流适合做一切文件数据的拷贝(音视频,文本);字节流不适合读取中文内容输出。
- 字符流适合做文本文件的操作(读,写)。
END
学习自:黑马程序员——Java课程