字符流-File类读写

本文详细介绍了Java中使用FileWriter进行字符流读写的步骤,包括创建FileWriter对象、写入字符串、刷新缓冲区和关闭流。强调了close()与flush()方法的区别,close()会关闭流并刷新数据,而flush()仅刷新数据,流仍可使用。并提供了字符流拷贝的示例代码。

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



一、字符流的读写

1写入字符流步骤FileWriter为例

        a、创建一个FileWriter对象,该对象一被初始化,就必须要明确被操作的文件。且该目录下如果已有同名文件,则同名文件将被覆盖。其实该步就是在明确数据要存放的目的地。

(注意:创建对象,创建文件时,系统会判断是否存在该路径,如果不错在就会报IO异常。因此要对异常做处理。)

        b、调用write(String s)方法,将字符串写入到流中。

        c、调用flush()方法,刷新该流的缓冲,将数据刷新到目的地中。

        d、调用close()方法,关闭流资源。但是关闭前会刷新一次内部的缓冲数据,并将数据刷新到目的地中。

2close()flush()区别:

        flush()刷新后,流可以继续使用;

       close()刷新后,将会关闭流,不可再写入字符流。

3、示例:

import java.io.FileWriter;
import java.io.IOException;
/**
 * 在硬盘上创建一个文件并写入一些文字数据。
 * 练习字符流操作步骤
 * @author Administrator
 */
public class FileWriterTest
{
	public static void main(String[] args) throws IOException
	{
		//1.创建一个FileWriter对象,
		FileWriter fw = new FileWriter("C:\\demo.txt");
		//2.调用write(string)方法,将字符串写入到流中。
		fw.write("abcdefg");
		//3.调用flush()方法,刷新该流的缓冲,将数据刷新到目的地中。
		fw.flush();
		
		//4.flush()方法可以继续用该流写入内容
		fw.write("flush可以继续写入内容");
		fw.flush();
		
		/*
		 * 而使用了close()方法则先刷新该流的缓冲,然后关闭该流。因此关闭后不可以续写
		 * fw.close()
		 * fw.write("不能续写");
		 */
	}
}

4、拷贝图例


示例:

import java.io.FileReader;
import java.io.FileWriter;
/**
 * 复制步骤
 * 将C盘下文件数据存储到D盘的一个文件中
 * 步骤:
 * 1、在D盘创建一个文件,用于存储C盘文件中的数据;
 * 2、定义读取流和C盘文件关联;
 * 3、通过不断的读写王岑数据存储;
 * 4、关闭资源
 * 
 * @author Administrator
 */
public class CopyTest
{
	public static void main(String[] args) throws Exception
	{
		// copy1();
		copy2();
	}
	//用缓存读取实现copy
	public static void copy2()
	{
		FileWriter fw = null;
		FileReader fr = null;		
		try
		{
			fr = new FileReader("C:/demo.txt");
			fw = new FileWriter("C:/demo_copy.txt");
			
			char[] buf = new char[1024];
			int length = 0;
			while (-1 != (length = fr.read(buf)))
			{
				fw.write(buf,0,length);
			}
		} catch (Exception e)
		{
			throw new RuntimeException("读写失败");
		}
		finally{
			if(fr != null)
				try
				{
					fr.close();
				} catch (Exception e2)
				{
					// TODO: handle exception
				}
			
			if(fw != null)
				try
				{
					fw.close();
				} catch (Exception e2)
				{
					// TODO: handle exception
				}
		}
	}
	
	//从C盘读取一个字符,就往D盘写一个字符。
	public static void copy1() throws Exception
	{
		//创建一个文件用于存储读取的数据。
		FileWriter fw = new FileWriter("C:/demo_copy.txt");
		//定义读取流和源文件关联
		FileReader fr = new FileReader("C:/demo.txt");
		
		int length = 0;
		while ((length = fr.read()) != -1)
		{
			fw.write(length);
		}
		fw.close();
		fr.close();
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值