黑马程序员:IO流之字符流

---------------------- android培训java培训、期待与您交流! ----------------------
/*
IO流之字符流的两个基类
Reader Writer
数据的最常见体现形式是:文件。
FileReader FileWriter
读取缓冲技术
BufferedReader BufferedWriter
*/
import java.io.*;
class IODemo
{
	public static void main(String[] args) throws IOException//为了演示代码简洁所以抛出异常,应该try,catch
	{
		fileWriter();
	    contWrite();
		fileRead();
		bufWrite();
		bufRead();
	}

//FileWriter对象演示及IO异常的处理+++++++++++++++++++++++++++++++++++++++++++++
	public static void fileWriter() 
	{
		FileWriter fw = null;
		try
		{
			//创建一个FileWriter对象,该对象一被初始化就要明确被操作的文件。
			//创建对象时会把demo.txt文件创建到指定目录,如果有同名文件存在会被覆盖。
			fw = new FileWriter("demo.txt");
			//调用write方法,将字符串写入到流中。
			fw.write("abvadf");
			//刷新流对象中的缓冲数据,将数据刷到目的文件中。
			fw.flush();
			//关闭流资源,但关闭前会调用flush刷新一次。flush刷新后流可以继续使用。
			//fw.close();	
		}
		catch (IOException e)
		{
			throw new RuntimeException("读写失败");		
		}
		finally
		{
			try
			{
				//一定要对fw进行非空判断,如果为空就无法调用close方法。
				if(fw!=null)
					fw.close();
			}
			catch (IOException e)
			{
				throw new RuntimeException("关闭失败");
			}
		}
	}

//FileWriter对已有文件的数据续写演示,这里抛出异常是为了演示代码简洁,实际应该向上面的代码做try,catch处理++++++++++++++++++++++++++++++++++++++++++++++
	public static void contWrite() throws IOException
	{
		//传递一个true参数,代表不覆盖已有文件,并在已有文件的末尾处续写数据
		FileWriter fw = new FileWriter("demo.txt",true);
		fw.write("续写");
		fw.write("\r\n换行演示");//windows中"\r\n"代表换行
		fw.flush();
	}

//FileReader演示两种读取方式
	public static void fileRead()throws IOException//为了演示所有抛出异常,应该try,catch处理。
	{
		//创建一个文件读取流对象,和指定名称的文件相关联。
		//要保证该文件是已经存在的,如果不存在会发生FileNotFoundException异常。
		FileReader fr = new FileReader("demo.txt");

//++++++第一种读取方式:调用读取流对象的read方法。++++++++++++++++++++
		//read():一次读一个字符返回字符对应的int值,而且自动往下读。读到末尾没有数据时会返回-1
		/*
		int ch = 0;
		while((ch=fr.read())!=-1)
		{
			System.out.println((char)ch);
		}
		*/
		/*
		while(true)
		{
			int ch = fr.read();
			if(ch==-1)
				break;
			System.out.println((char)ch);	
		}
		*/

//++++++第二种读取方式:read(char[])方法把读到的字符存到了字符数组里+++++++++++++++++++++++++++++++++++++++++++++++++
		
		//所以要建立一个数组char[],如果定义的字符数组长度不够时就返回read读到的字符个数,当没有数据时返回-1。
		
		char[] buf = new char[1024];//一般定义1024的整数倍。
		int num = 0;
		while((num = fr.read(buf))!=-1)
		{
			//这里建议不用println如果数据超过1024时,会在不该换行的时候换行
			System.out.print(new String(buf,0,num));
		}
		fr.close();
	}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	/*
	读写缓冲区:BufferedWriter BufferedReader 
	*/
	//++++BufferedWriter演示++++++++++++++++++++++++++++
	public static void bufWrite()throws IOException
	{
		//创建一个字符写入流对象
		FileWriter fw = new FileWriter("buf.txt");
		
		//将需要缓冲的流对象作为参数传递给缓冲区的构造函数。
		BufferedWriter bufw = new BufferedWriter(fw);
		bufw.write("dsafdasf");
		//缓冲区提供一个跨平台的换行方法newLine();只能在缓冲区对象中使用。
		bufw.newLine();
		//记住,只要用到缓冲区就要记得刷新
		bufw.flush();
		//其实关闭缓冲区就是关闭,使用该缓冲区的流对象。所以fw.close()可以不写。
		bufw.close();
	
	}
	//++++BufferedReader演示++++++++++++++++++++++++++++
	public static void bufRead()throws IOException
	{
		BufferedReader bufr = new BufferedReader(new FileReader("buf.txt"));
		//缓冲区提供了读一行的方法readLine();读到无数据时返回null
		String line = null;
		while((line=bufr.readLine())!=null)
		{
			System.out.println(line);
			bufr.readLine();
		}
		bufr.close();

	}
}

---------------------- android培训java培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net/heima
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值