FileReader和FileWriter的使用
FileReader
用来方便的从文件中读出字符的类,FileReader意味着是用来读字符的流。底层是基于字节流实现的。
继承的类
public class FileReader extends InputStreamReader
public class InputStreamReader extends Reader
构造方法
public FileReader(String fileName);
用文件的路径名来构造FileReader
public FileReader(File file);
用File对象来构造FileReader
public FileReader(FileDescriptor fd);
用文件描述符构造FileReader
常用的方法
int read();
读取单个字符。返回作为整数读取的字符(转成对应的ASCII值用char进行转换),如果已达到流末尾,则返回 -1。
int read(char []cbuf);
将字符读入数组。返回读取的字符数。如果已经到达尾部,则返回-1。
从文本中读取数据的操作
/使用FileReader读取一份数据
FileReader reader = null;
try {
reader = new FileReader("a.txt");
//读取字符数据
System.out.println((char)reader.read());
int tmp = 0;
while((tmp = reader.read()) != -1){
System.out.println((char)tmp);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭流对象
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
注意
1)read方法读取字符char,一个字符可能占用1个字节,2个字节或者3个字节
2)占用字节的个数由编码表所决定
3)read最终返回int,如果读取到的字符用2个字节表示,前2个字节即前16位可以补0
4)FileReader中的构造方法调用的是FileInputStream
FileWriter
是用来方便的将字符数据写入文件的类,FileWriter是用来写字符流的,如果要写字节流数据。
继承的类
public class FileWriter extends OutputStreamWriter
public class OutputStreamWriter extends Writer
构造方法
public FileWriter(String fileName);
用文件的路径名来构造FileWriter
public FileWriter(String fileName, boolean append);
用文件路径名来构造FileWriter,第二个参数为true的话,表示以追加的形式写入文件
public FileWriter(File file);
用File对象来构造FileWriter,写数据时,从文件开头开始写起,会覆盖以前的数据
public FileWriter(File file, boolean append);
还是用File对象构造,如果第二个参数为true的话,表示以追加的方式写数据,从文件尾部开始写起
public FileWriter(FileDescriptor fd);
用文件描述符来构造FileWriter
常用的方法
void write(String str)
写入字符串。
public void write(int c)
写入单个字符。
public void write(char[] cbuf)
写入字符数组。
public abstract void write(char[] cbuf,int off,int len)
写入字符数组的某一部分。cbuf:字符数组,off :开始写入字符处的偏移量,len :要写入的字符数。
public void write(String str,int off,int len)
写入字符串的某一部分。str:字符串,off:相对初始写入字符的偏移量,len:要写入的字符数。
向文本中写入数据的操作
//使用FileWriter写入数据
FileWriter writer = null;
try {
writer = new FileWriter("b.txt");
writer.write("你好");
writer.write("hello world");
writer.
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
拷贝a.txt到b.txt
//拷贝文件
FileReader reader = null;
FileWriter writer = null;
try {
reader = new FileReader("a.txt");
writer = new FileWriter("b.txt");
//一个一个字符拷贝
// int tmp = 0;
// while((tmp = reader.read()) != -1){
// writer.write(tmp);
// }
//缓冲数组
char[] buf = new char[256];
int len = 0;
while((len = reader.read(buf)) != -1){
writer.write(buf, 0, len);
//字符数组 写入
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}