1.为什么要用字符流
因为使用字节流操作文字时容易出现乱码问题
所以使用字符流读取中文,字符流以字符为单位操作数据,这样就可以解决中文乱码问题
2.字符输入流
顶层父类: Reader(抽象类)
共性方法:
public void close();//释放资源
public int read();//一次读一个字符
public int read(char[] chs);//一次读取一堆字符,实际读取的字符个数
3.FileReader类的使用
文件的字符输入流: 以字符为单位从文件中读取数据
- a.构造方法
public FileReader(String filepath);//指定文件路径
public FileReader(File file);//指定File对象
public class FileReaderDemo01 {
public static void main(String[] args) throws Exception {
//1.创建一个FileReader对象
FileReader fr = new FileReader("1.txt");
// FileReader fr = new FileReader(new File("1.txt"));
/**
* 以上构造干了三件事!!
* a.创建对象 fr
* b.判断文件是否存在
* 如果存在,就存在,不清空内容
* 如果不存在,直接抛出FileNotFoundException异常
* c.绑定fr和文件1.txt
*/
}
}
- b.读取一个字符
/**
* FileReader的read方法
*/
public class FileReaderDemo02 {
public static void main(String[] args) throws Exception {
//1.创建一个FileReader对象
FileReader fr = new FileReader("1.txt");
//2.一次读一个字符
//int ch = fr.read();
//System.out.println((char) ch);
//============一次读取一个字符的标准循环============
int ch = 0; //用于保证读取到的字符
/**
* (ch = fr.read()) != -1
* 以上代码干了三件事!
* a.先读 fr.read()
* b.赋值 ch = 读取到的字符
* c.判断 ch != -1
*/
while ((ch = fr.read()) != -1) {
System.out.print((char) ch);
}
//3.释放资源
fr.close();
}
}
- c.读取一个字符数组
/**
* FileReader的read方法
*/
public class FileReaderDemo03 {
public static void main(String[] args) throws Exception {
//1.创建一个FileReader对象
FileReader fr = new FileReader("1.txt");
//2.一次读一个字符数组
//char[] chs = new char[4];
//int len = fr.read(chs);
//System.out.println("实际读取"+len+"个字符!");
//System.out.println(new String(chs,0,len));
//=========一次读取一个字符数组的标准循环==========
char[] chs = new char[4];
int len = 0;
/**
* (len = fr.read(chs)) != -1
* 以上代码干了三件事!!
* a.先读 fr.read(chs)
* b.赋值 len = 实际读取的字符个数
* c.判断 len != -1
*/
while ((len = fr.read(chs)) != -1) {
System.out.print(new String(chs,0,len));
}
//3.释放资源
fr.close();
}
}
4.字符输出流
顶层父类:Writer(抽象类)
共性方法:
public void close();//释放资源
public void flush();//刷新缓冲区(对于字符流有用!!)
public void write(int ch);//写一个字符
public void write(char[] ch);//写一堆字符
public void write(char[] ch,int startIndex,int len);//写一堆字符的一部分
public void write(String str);//写一个字符串
public void write(String str,int startIndex,int len);//写一个字符串的一部分
5.FileWriter类的使用
文件的字符输出流:向文件中以字符为单位写数据
- a.构造方法
public FileWriter(String filepath);指定文件路径
public FileWriter(File file);指定文件对象
/**
* FileWriter的构造方法
*/
public class FileWriterDemo01 {
public static void main(String[] args) throws Exception {
//1.创建一个FileWriter对象
FileWriter fw = new FileWriter("1.txt");
// FileWriter fw = new FileWriter(new File("1.txt"));
/***
* 以上构造干了三件事!
* a.创建对象fw
* b.判断文件是否存在
* 如果存在,清空文件内容
* 如果不存在,创建一个新文件
* c.绑定fw和1.txt
*/
}
}
- b.写出字符数据的三组方法
public void write(int ch);//写一个字符
public void write(char[] ch);//写一堆字符
public void write(char[] ch,int startIndex,int len);//写一堆字符的一部分
public void write(String str);//写一个字符串
public void write(String str,int startIndex,int len);//写一个字符串的一部分
/**
* FileWriter的write方法
*/
public class FileWriterDemo02 {
public static void main(String[] args) throws Exception {
//1.创建一个FileWriter对象
FileWriter fw = new FileWriter("1.txt");
//2.以字符写数据
//a.一次写一个字符
fw.write('中');
//b.一次写一个字符数组
char[] chs = {'中','国','我','爱','你'};
fw.write(chs);
//c.一次写一个字符数组中的一部分
fw.write(chs,2,3);
//d.一次写一个串
fw.write("中国我爱你,你爱我吗?");
//e.一次写一个串的一部分
fw.write("中国我爱你,你爱我吗?",4,3);
//3.释放资源
fw.close();
}
}
- c.关闭和刷新的区别
/**
* FileWriter的flush和close方法
*/
public class FileWriterDemo03 {
public static void main(String[] args) throws Exception {
//1.创建一个FileWriter对象
FileWriter fw = new FileWriter("1.txt");
//2.写数据
fw.write("Java");
//调用刷新缓冲区
//fw.flush();
//3.释放资源
fw.close();
//再次写数据
fw.write("PHP"); //报错!!
}
}
close方法和flush方法的区别:
a.flush用于刷新缓冲区,流并不关闭,可以继续写数据!
b.close也有刷新的功能,同时流也会关闭,不能继续使用该流写数据了!
- d.续写和换行
如何续写呢?? 非常简单,只要使用以下两个构造即可
public FileWriter(String filepath,boolean append);指定文件路径
public FileWriter(File file,boolean append);指定文件对象
/**
* FileWriter的续写
*/
public class FileWriterDemo04 {
public static void main(String[] args) throws Exception {
//1.创建一个FileWriter对象
FileWriter fw = new FileWriter("1.txt", true);//true表示续写
//2.写数据
for (int i = 0; i < 10; i++) {
fw.write("java");
}
//3.释放资源
fw.close();
}
}
如何换行??非常简单,只要写入一个代码换行符号即可
windows: \r\n
Linux: \n
Mac: \r
/**
* FileWriter的换行
*/
public class FileWriterDemo05 {
public static void main(String[] args) throws Exception {
//1.创建一个FileWriter对象
FileWriter fw = new FileWriter("1.txt");
//2.写数据
for (int i = 0; i < 10; i++) {
fw.write("php\r\n");
// fw.write("\r\n");
}
//3.释放资源
fw.close();
}
}
字符流和字节流我们什么时候采用哪些流??
如果读写文本文件(.txt .java): 字符流
如果其他文件(.png .avi .mp3 .ppt .doc .xlsx):字节流
1582

被折叠的 条评论
为什么被折叠?



