FileReader、FileWriter
前面说了文件字节输入流,现在来看看文件字符输入流。
1.FileReader
FileReader是文件字符输入流,用于读取硬盘数据到内存,只能处理简单的文本文件。
(1)如何new对象?
package com.dh.io;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class FileReader01 {
public static void main(String[] args) {
try {
//创建文件字符流对象
FileReader fr = new FileReader("C:\\Users\\DH\\Desktop\\test.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
(2)如何读取数据?
准备一个txt文件:文件内容为abcdef。
-
int read()
读取一个字符,返回值为读取的数据,读取完了数据到文件的末尾,值为-1。
package com.dh.io;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class FileReader01 {
public static void main(String[] args) {
FileReader fr = null;
try {
fr = new FileReader("C:\\Users\\DH\\Desktop\\test.txt");
int i = 0;
while ((i = fr.read())!=-1){
System.out.println(i);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fr != null){
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
结果:
97
98
99
100
101
102
-
int read(char[] c)
每次读取c.length个字符,返回值为读取数据的字符个数,没有数据的读取返回-1。
package com.dh.io;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class FileReader02 {
public static void main(String[] args) {
FileReader fr = null;
try {
fr = new FileReader("C:\\Users\\DH\\Desktop\\test.txt");
int i = 0;
char[] chars = new char[1025*524];
while ((i = fr.read(chars))!=-1){
System.out.println(new String(chars,0,i));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fr != null){
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
结果:
abcdef
2.FileWriter
FileReader是文件字符输出流,用于将内存中的数据写入硬盘,只能处理简单的文本文件。
(1)如何new对象?
package com.dh.io;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriter01 {
public static void main(String[] args) {
FileWriter fw = null;
try {
fw = new FileWriter("C:\\Users\\DH\\Desktop\\test.txt");
} catch (IOException e) {
e.printStackTrace();
}
}
}
(2)如何写数据?
-
void write(char[] c)
package com.dh.io; import java.io.FileWriter; import java.io.IOException; public class FileWriter01 { public static void main(String[] args) { FileWriter fw = null; try { fw = new FileWriter("C:\\Users\\DH\\Desktop\\test.txt"); char[] chars = {'c','h','i','n','a'}; fw.write(chars); fw.flush(); } catch (IOException e) { e.printStackTrace(); }finally { if(fw != null){ try { fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
结果:原先的abcdef已经不见了,只剩下新写入的china,所以,会先清空原文件内容再写入。
-
void write(char[] c,int off,int len)
fr = new FileReader("C:\\Users\\DH\\Desktop\\test.txt"); fw = new FileWriter("D:\\test.txt"); char[] chars = new char[1024*512]; int readCount = 0; while ((readCount = fr.read(chars))!=-1){ fw.write(chars,0,readCount); } fw.flush();
指定写的数据长度为char[]中前readCount个。
-
void write(String s)
只需要将char[]改成字符串即可,也会先清空原文件内容再写入。
-
void append(char c)
-
往文件中写入一个字符,也会先清空原文件内容再写入。
如果不想清空文件再写入,就在构造方法中再添加一个append参数,设置值为true。
3.复制文本文件
实现一边读一边写的文件复制操作:
package com.dh.io;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileCopy02 {
public static void main(String[] args) {
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader("C:\\Users\\DH\\Desktop\\test.txt");
fw = new FileWriter("D:\\test.txt");
char[] chars = new char[1024*512];
int readCount = 0;
while ((readCount = fr.read(chars))!=-1){
fw.write(chars,0,readCount);
}
fw.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fw != null){
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fr != null){
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
由于本文和上一篇内容大同小异,所以本文写的较为简略,如果直接看到这篇文章,觉得很多地方没有写明白的,可以看一下上篇哟~