1.文件字符流
文件字节流可以处理所有的文件,如果处理的是本文文件,可以使用文件字符流,它以字符为单位进行操作。
文件字符输入流
import java.io.*;
public class FileReaderDemo {
public static void main(String[] args) {
FileReader frd = null;
try {
//创建文件字符输入流对象
frd = new FileReader("d:/a.txt");
int temp = 0 ;
//返回Unicode值,一次读一个字符
while((temp=frd.read())!=-1){
System.out.println((char)temp);
}
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(frd != null) {
frd.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
文件字符输出流
import java.io.*;
public class FileWriterDemo {
public static void main(String[] args) {
FileWriter fw = null;
FileWriter fw1 = null;
try {
//创建字符输出流
fw = new FileWriter("d:/b.txt");
fw.write("hello world\r\n"); //\r表示回车 \n表示换行
fw.write("I am happy"); //堆积处理
fw.flush();
//如果重新创建一个FileWriter操作同一个文件,如果没有是否追加的指令,默认覆盖
fw1 = new FileWriter("d:/b.txt",true);
fw1.write("hhh");
fw1.flush();
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(fw!=null) {
fw.close();
}
if(fw1!=null) {
fw.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
2.字符流实现文本文件的拷贝处理
import java.io.*;
public class FileCopyTools2 {
public static void main(String[] args) {
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader("d:/a.txt");
fw = new FileWriter("d:/c.txt");
//char类型不是Byte类型,只能指定固定长度,没有估计函数
char[] buffer = new char[1024];
int temp=0;
while((temp=fr.read(buffer))!=-1) {
fw.write(buffer,0,temp);
}
fw.flush();
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(fr!=null) {
fr.close();
}
if(fw!=null) {
fw.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
3.字符缓冲流
BufferedReader/BufferedWriter增加了缓存机制,大大提高了读写文本文件的效率。
字符输入缓冲流
BufferedReader是针对字符输入流的缓冲流对象,提供了更方便的按行读取的方法:readLine(); 在使用字符流读取文本文件时,我们可以使用该方法以行为单位进行读取。
import java.io.*;
public class BufferedReaderDemo {
public static void main(String[] args) {
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader("d:/b.txt");
br = new BufferedReader(fr);
String temp = "";
while((temp=br.readLine())!=null) { //注意这里字符串用null,如果是int用-1
System.out.println(temp);
}
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(br!=null) {
br.close();
}
if(fr!=null) {
fr.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
字符输出缓冲流
BufferedWriter是针对字符输出流的缓冲流对象,在字符输出缓冲流中可以使用newLine();方法实现换行处理。
import java.io.*;
public class BufferedWriterDemo {
public static void main(String[] args) {
FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter("d:/e.txt");
bw = new BufferedWriter(fw);
bw.write("hello world");
bw.write("hhhh");
bw.newLine();
bw.write("i love you");
bw.flush();
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(bw !=null) {
bw.close();
}
if(fw !=null) {
fw.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
4.字符缓冲流实现文本文件的拷贝
"d:/e.txt","d:/ee.txt");
}
/*
* 基于字符流缓冲流实现文件拷贝
*/
public static void copyFile(String src,String des) {
BufferedReader br = null;
BufferedWriter bw = null;
try {
br = new BufferedReader(new FileReader(src));
bw = new BufferedWriter(new FileWriter(des));
String temp = "";
while((temp = br.readLine())!=null) {
bw.write(temp);
bw.newLine(); //实现换行处理
}
bw.flush();
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(br!=null) {
br.close();
}
if(bw!=null) {
bw.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
5.字符缓冲流为文件中的内容添加行号
import java.io.*;
public class LineNumberDemo {
public static void main(String[] args) {
BufferedReader br = null;
BufferedWriter bw = null;
try {
br = new BufferedReader(new FileReader("d:/e.txt"));
bw = new BufferedWriter(new FileWriter("d:/eee.txt"));
String temp = "";
int i=1;
while((temp = br.readLine())!=null) {
bw.write(i+","+temp);
bw.newLine();
i++;
}
bw.flush();
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(br!=null) {
br.close();
}
if(bw !=null) {
bw.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}