java.io.Reader
*java.io.Reader 用于读取字符流的抽象类。 子类必须实现的唯一方法是read(char [],int,int)和close()。
*abstract void close() 关闭流并释放与之相关联的任何系统资源。
*int read() 读一个字符
*int read(char[] cbuf) 将字符读入数组。
*abstract int read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
java.io.FileReader
继承关系:
public class InputStreamReader extends Reader
public class FileReader extends InputStreamReader
FileReader :文件字符输入流,将文件字符从硬盘读取到内存中
构造方法
FileReader(File file) 创建一个新的 FileReader ,给出 File读取。
FileReader(String fileName) 创建一个新的 FileReader ,给定要读取的文件的名称。
*参数file和fileName :数据读取源
测试用例:
public class ReaderText1 {
public static void main(String[] args) throws IOException {
//创建用FileReader 并指向一个文件
FileReader fr = new FileReader("F:\\Users\\book\\文学作品\\text\\不朽.txt");
//使用 int read(char[] cbuf, int off, int len) 方式读取
int len=0;
char[] chars=new char[1024];
while((len=fr.read(chars))!=-1) {
//String(char[] value, int offset, int count) 分配一个新的 String ,其中包含字符数组参数的子阵列中的字符。
System.out.print(new String(chars,0,len));
}
}
}
java.io.Writer
public abstract class Writer 字符输出流,是所有字符输出类的父类
重要方法:
*abstract void close() 关闭流,先刷新。
*abstract void flush() 刷新流。
*void write(char[] cbuf) 写入一个字符数组。
*abstract void write(char[] cbuf, int off, int len) 写入字符数组的一部分。
*void write(int c) 写一个字符
*void write(String str) 写一个字符串
*void write(String str, int off, int len) 写一个字符串的一部分。
java.io.FileWriter
继承关系:
java.io.OutputStreamWriter extends Writer
java.io.FileWriter extends OutputStreamWriter
FileWriter:文件字符写入流,把内存中数据写入到文件中
构造方法
—FileWriter(File file) 给一个File对象构造一个FileWriter对象。
—FileWriter(String fileName) 构造一个给定文件名的FileWriter对象。
—FileWriter(String fileName) 构造一个给定文件名的FileWriter对象。
—FileWriter(String fileName, boolean append) 构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。
FileReader 、FileWriter 综合测试用例——文档内容的复制
测试1:
调用FileReader 实例对象的read方法将数据存放到字符数组cs中,再调用FileWriter实例对象的write(char[] cbuf, int off, int len) 方法将对应内容写到硬盘中
public class WriteText1 {
public static void main(String[] args) throws IOException {
//创建一个读取
FileReader fr = new FileReader("F:\\Users\\book\\文学作品\\text\\不朽.txt");
//创建一个写入
FileWriter fw = new FileWriter("F:\\Users\\book\\文学作品\\text\\demo.txt");
char [] cs=new char[1024];
int len=0;
int count=0;
while((len=fr.read(cs))!=-1) {
fw.write(cs,0,len);
}
fw.close();
fr.close();
System.out.println("OK");
}
}
测试2:给txt文本添加换行
public class WriteText1 {
public static void main(String[] args) throws IOException {
//创建一个读取
FileReader fr = new FileReader("F:\\Users\\book\\文学作品\\text\\不朽.txt");
//创建一个写入
FileWriter fw = new FileWriter("F:\\Users\\book\\文学作品\\text\\demo.txt");
char [] cs=new char[1024];
int len=0;
int count=0;
//一次读取一个字符
while((len=fr.read())!=-1) {
count++;//没读取到一个字符,计数加一
if(count==80) {//如果计数为65,表明该段需要换行,写入一个换行符
fw.write("\n");
}
char ch=(char)len;
if(ch=='\n') {//每次如果读取到换行符,计数清零
count=0;
}
fw.write(ch);
}
fw.close();
fr.close();
System.out.println("OK");
}
}