目录
字符输入流FileReader
空参的read方法
带参的read方法
字符输出流FileWriter
字符输入流底层原理
字符输出流底层原理
字符输入流FileReader
输入流 一次读一个字节 遇到中文时 一次读多个字节
输出流 底层会把数据按照指定的编码方式进行编码 在变成直接写到文件当中
适用于纯文本文件的读写操作
底层就是字节流
输入流:一次读一个字节,遇到中文时,一次读多个字节
输出流:底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中
下面四个都是抽象类
字符流
空参的read方法
FileReader
可以从纯文本文件中读取数据
字符流的底层也是字节流
默认也是一个字节一个字节读取的
如果遇到中文就会一次读取多个字节 GBK一次两个字节 UTF-8一次读三个字节
read()方法底层原理
默认也是一个字节一个字节读取,如果遇到中文就好一次读取多个
最后把十进制作为返回值
这个十进制数据代表字符集上的数字
读取二进制数据会进行解码转成十进制
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc=new Scanner(System.in);
//创建对象并关联本地文件
FileReader fr=new FileReader("untitled\\a.txt");
int ch;
while ((ch=fr.read())!=-1)
System.out.print((char)ch);
fr.close();
//释放资源
}
}
read方法默认一个字节一个字节进行读取
读取后方法底层进行解码转换成十进制
我们拿到的是一连串的十进制数,再进行强制类型转换
带参的read方法
创建字符输入流关联本地文件
读取数据,读到末尾返回-1
释放资源关流
核心是创建字符数组用字符数组接收数据,再统一输出
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
//创建对象
FileReader fr=new FileReader("untitled\\a.txt");
//读取数据 创建char类型的数组
char []chars=new char[20];//一次读取二十个字符
int len=0;//当前读取到的长度
while((len=fr.read(chars))!=-1){
//把数组中的数据便成字符串在进行打印
System.out.println(new String(chars, 0, len));
//表示只对读取到的数据进行打印
}
fr.close();//关流
}
}
带参数的read函数把读取数据,解码,强制转换三步合并了
直接把最后的字符放到数组里面
字符输出流FileWriter
创建字符输出流对象
参数是字符串表示的路径或者是File对象都是可以的
如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的
如果文件已经存在则会清空文件,如果不想清空可以打开续写开关
写数据
如果write方法的参数是整数,但是实际上写到本地文件中的是整数在字符集上所对应的字符
释放资源
每次使用完流后都要释放资源
import java.io.FileWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
FileWriter fw=new FileWriter("untitled\\a.txt");
fw.write("多多");
//会根据当前字符集的编码方式进行编码 把编码之后的数据写到文件当中去
fw.close();
}
}
write方法的形参可以是
字符串 字符数组 以及可以指定范围
字符输入流底层原理
读取数据是从数据源读取入内存
创建FileReader对象时
等于是创建了数据源和内存之间的通道
同时在内存创建了长度为8192的字节数组
这个数组又叫缓冲区
调用read方法,先判断缓冲区中是否有数据可以读取
第一次缓冲区没有数据
会从文件中读取数据,尽可能填满缓冲区
所以调用一次read方法就会把硬盘的数据放到缓冲区里面
如果文件中的数据较少,那么有多少数据就读取多少数据
然后每一次读取会从缓冲区中读取
减少了访问硬盘的次数,加快了读取速度
当文件中没有数据后,返回-1
字节流没有缓冲区 字符流有缓冲区
字符输出流底层原理
在写出的时候
会把所有的数据按照UTF-8进行编码
一个中文占三个字节
一个英文占一个字节
数据真正保存到目的地的时候 有三种情况
缓冲区装满了会保存到本地
也可以手动刷新 手动关流
个人号推广
博客主页
朱道阳-CSDN博客
Web后端开发
https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482
Web前端开发
https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482
数据库开发
https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482
项目实战
https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482
算法与数据结构
https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482
计算机基础
https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482
回忆录
https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482