(黑马程序员)学习笔记,IO输入输出(字符流)

本文介绍了Java中字符流的基本使用方法,包括FileReader、FileWriter等类的应用,并通过实例展示了如何实现文件的复制功能。此外,还深入探讨了BufferedReader和BufferedWriter的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接下来学到了字符流IO输入输出,这里通过写一个复制的方法把FileReader和FileWriter中的基本方法都用到了
package io;
/**
 * 字符流
 * FileReader
 * FileWriter
 * 
 * BufferedReader
 * BufferedWriter
 */
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileReaderDemo {

	public static void main(String[] args) throws IOException {
//		read2();
//		copy();
	}
	
	private static void read() throws IOException{
		//创建一个文件读取流对象,和指定名称的文件相关联
		//要保证文件是已经存在的,如果不存在,会发生异常FileNotFoundException
		FileReader fr = new FileReader("E:\\BaiduYunDownload\\1.txt");
		//调用读取流对象的read方法
		//read()方法一次读一个字符,而且会自动往下读
		int ch = 0;
		while((ch=fr.read())!=-1){
			System.out.println("ch = "+(char)ch);
		}
		fr.close();
	}
	
	private static void read2() throws IOException{
		FileReader fr = new FileReader("E:\\BaiduYunDownload\\1.txt");
		//定义一个字符数组,用于存储读到的字符
		//read(char[])返回读到的字符数
		char[] buf = new char[1024];
		int ch = 0;
		while((ch=fr.read(buf))!=-1){
			System.out.print(new String(buf,0,ch));
		}
		fr.close();
	}
	
	private static void copy() throws IOException{
		//复制的原理:就是把一个磁盘下的文件存储到另一个磁盘中的的一个文件
		/* 例如将C盘文件复制到D盘中
		 * 1.在D盘创建一个文件,用于存储C盘文件中的数据
		 * 2.定义读取流和C盘文件关联
		 * 3.通过不断地读写完成数据存储
		 * 4.关闭资源
		 */
		FileReader fr = new FileReader("E:\\BaiduYunDownload\\1.txt");
		FileWriter fw = new FileWriter("E:\\BaiduYunDownload\\2.txt");
		
		int len = 0;
		char[] buf = new char[1024];
		while((len=fr.read(buf))!=-1){
			fw.write(buf, 0, len);
		}
		
		fr.close();
		fw.close();
	}
	
	private static void copy(String resource,String destion) throws IOException{
		//根据copy()方法扩展自由指定文件复制到指定地址
		File resf = new File(resource);
		File desf = new File(destion);
		if(!(resf.exists())){
			throw new IOException("源文件不存在");
		}
		if(!(desf.exists())){
			desf.createNewFile();
		}
		FileReader fr = new FileReader(resource);
		FileWriter fw = new FileWriter(destion);
		
		int len = 0;
		char[] buf = new char[1024];
		while((len=fr.read(buf))!=-1){
			fw.write(buf, 0, len);
		}
		
		fr.close();
		fw.close();
	}
}

字符流中还有BufferedReader和BufferedWriter,下面的例子就用到了这些,并且自己写了一个与LineNumberReader功能相同的类

package io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedReaderDemo {

	private static void copy() throws Exception{
		BufferedReader br = null;
		BufferedWriter bw = null;
		System.out.println("创建BufferedReader和BufferedWriter");
		 try {
			br = new BufferedReader(new FileReader("E:\\BaiduYunDownload\\1.txt"));
			bw = new BufferedWriter(new FileWriter("E:\\BaiduYunDownload\\2.txt"));
			System.out.println("设置好源文件和目标文件");
			String buf = null;
			while((buf=br.readLine())!=null){
				bw.write(buf);
				bw.newLine();
				bw.flush();
			}
		} catch (FileNotFoundException e) {
			throw new FileNotFoundException("源文件未找到");
		} catch (IOException e) {
			throw new IOException("复制过程出错");
		}finally{
			if(bw!=null){
				System.out.println("关闭BufferedWriter");
				bw.close();
			}
			if(br!=null){
				System.out.println("关闭BufferedReader");
				br.close();
			}
		}
	}
	
	public static void main(String[] args) {
		try {
			copy();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值