IO-文件字符流-Java

本文详细介绍了Java中的文件字符流、字符缓冲流的使用,包括FileReader、FileWriter、BufferedReader和BufferedWriter的示例代码,以及如何利用这些流实现文本文件的拷贝和添加行号的功能。通过这些内容,读者可以深入理解Java IO字符流的处理机制和提升效率的方法。
摘要由CSDN通过智能技术生成

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();
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值