一:文件字符输入流:Reader
1:读一个字符
(中文不会出现乱码(如果代码与文件编码一致),性能较差)
public int read() 每次读取一个字符返回,如果字符已经没有可读的返回-1
public class Test { //我的字符集是UTF-8 bbb.txt里面的内容为“我爱学习java” public static void main(String[] args) throws Exception{ Reader ro=new FileReader("src/bbb.txt");//绝对路径 创建一个文件字符输入流 int code=ro.read();//返回的是字符编号 //一次读一个内容 System.out.println(code); //输出 25105 System.out.println((char)code); //输出 我 } }
使用循环一个字符一个字符的读
public class Test2 {
//使用循环一个字符一个字符的读
public static void main(String[] args) throws Exception {
Reader ro=new FileReader("src/bbb.txt");
int code;
while((code=ro.read())!=-1) {
System.out.print((char)code); //字符自带换行不用我们换行 输出我爱学习java
}
}
}
2:一次读取一个字符数组输出
public int read(char[] buffer) 每次读取一个字符数组,返回读取的字符数,如果字符已经没有可读的返回-1
目前阶段最好读取中文的方式
import java.io.FileReader;
import java.io.Reader;
public class Test3 {
//使用循环每次读取一个字符数组数据
public static void main(String[] args) throws Exception {
Reader ro=new FileReader("src/qqq.txt");//绝对路径
int len;//记录每次读取的长度
char[] buffer=new char[500];
while((len=ro.read(buffer))!=-1) {
String string=new String(buffer,0,len);// 解码读多少取回多少
System.out.print(string);
}
}
}
3.文件字符输出流
字符流、字节流如何选择使用?
字节流适合做一切文件数据的拷贝(音视频,文本)
字节流不适合读取中文内容输出
字符流适合做文本文件的操作(读、写)
package 字符流;
import java.io.FileWriter;
import java.io.Writer;
public class Test5 {
public static void main(String[] args) throws Exception{
//文件字符输出流
Writer wr=new FileWriter("E:/aaaaaa.txt",true);//没有文件会自动创建 ,第二个参数为true表示追加,没有表示覆盖
//写一个字符到文件
wr.write("a");
wr.write(97);
wr.write("牛");
wr.write("\r\n"); //换行
//写一个字符串
wr.write("我爱学习java");
wr.write("\r\n"); //换行
//写一个字符数组
wr.write("你是小牛马".toCharArray());
wr.write("\r\n"); //换行
//写一个字符串的一部分
wr.write("好好学习,天天向上", 2, 2); //写"学习" 起始位置 长度
wr.write("\r\n"); //换行
//写一个字符数组的一部分
wr.write("牛马学习66".toCharArray(),2,2); //写 学习
//wr.flush();//刷新 后还可以用流
wr.close(); //包含刷新,关闭后就不可再用
System.out.println("完成");
}