一,字符流的由来
1.字符流就是在字节流的基础上,加上编码,形成的数据流,字符流出现的意义是因为字节流在操作字符时,可能会有中文导致的乱码现象,所以字节流引申出了字符流.
2.字符流(以字符(char)为单位).字符输入流:Reader.常用子类:FileReader.
概念:
字符流:直接读取字符的io
字符流读取字符,先读取字节然后转换为字符,写入时将字符转化为字节后写入
二,FileReader写入和读取
1.读取:[FileReader]
public class FileReader extends InputStreamReader {
//用来读取字符文件便捷类。这个类的构造方法假定字符编码和默认字节缓冲区大小都是适当的.
要用这些指定的值在FileInputStream上构造一个 InputStreamReader.
//FileReader用于读取字符流,要读取原始字节流,考虑使用FileInputStream.
}
2.FileReader的用法与FileinputStream相似,创建Reader对象
public class Test14 {
public static void main(String[] args) throws Exception {
File f1 = new File("D:/l.txt");
Reader r = new FileReader(f1);
}
}
3.使用read()方法进行读取文件内容
public class Test14 {
public static void main(String[] args) throws Exception {
File f1 = new File("D:/l.txt");
Reader r = new FileReader(f1);
int read = r.read();
System.out.println((char) read);
}
}
4.循环读取文本内容并且输送到控制台
package Text01;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;
public class Test14 {
public static void main(String[] args) throws Exception {
// 创建读取文本文档的文件对象
File f1 = new File("D:/l.txt");
// 使用文本文档的文件对象创建字符读取流
FileReader fr = new FileReader(f1);
// 创建每次取出数据的字符数组
char [] c = new char[1024];
// 创建每次取出字符数组变量
int lp=0;
// 使用循环读取数据输送到控制台
while ((lp=fr.read(c))!=-1){
System.out.println(new String(c,0,lp));
}
// 关闭资源
fr.close();
}
}
三,Writer抽象类
1.java.io.Writer抽象类是表示用于写出字符流的所有超类,并将指定的字符信息写出到目的地。定义了字符输出流的基本共性功能方法。
构造方法如下所示:
2.创建Writer对象
package Text01;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Test15 {
public static void main(String[] args) throws IOException {
// 1.创建文本文档的文件对象
File f1 = new File("D:/lp.txt");
// 2.使用文本文档的文件对象创建写入流
FileWriter wt = new FileWriter(f1);
}
}
3.插入指定数据
package Text01;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Test15 {
public static void main(String[] args) throws IOException {
// 1.创建文本文档的文件对象
File f1 = new File("D:/lp.txt");
// 2.使用文本文档的文件对象创建写入流
FileWriter wt1 = new FileWriter(f1,true);
FileWriter wt2 = new FileWriter("D:/lp.txt",true);
// 3.将字符串索引起始长度写入文本文件
wt2.write("abcdefghijklmnopqrst",3,5);
// 4.将字节数组指定索引起始长度写入文件lp.txt
char [] xy = {'欲','买','桂','花','同','载','酒'};
wt2.write(xy,0,5);
// 5.刷新关闭资源
wt2.close();
wt2.flush();
}
}
4.方法如图所示还有很多可以试验:
5.读取文档输出控制台并且复制
package Text01;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
public class Text16 {
public static void main(String[] args) throws Exception {
// 1.创建指定文本文档的文件对象
File f1 = new File("D:/html1.txt");
// 2.创建文本输出对象
File f2 = new File("D:/html2.txt");
// 3.创建对应文件的字符读取与输入流
FileReader fr = new FileReader(f1);
FileWriter fw = new FileWriter(f2);
// 4.创建读取字符数组
char [] c = new char[1000];
// 5.创建读取长度
int len=0;
while ((len=fr.read(c))!=-1){
String string = new String(c,0,len);
System.out.println(string);
fw.write(string);
// 6.关闭资源
fr.close();
fw.flush();
fw.close();
}
}
}