Java中IO流(2)——字符流(传智播客毕老师视频讲解)

1、Writer(写)


1.1、FileWriter

(1)简要代码(由于流操作可能会有异常发生,简要代码中先将异常抛出,暂不进行处理):

import java.io.*;
public class Demo 
{
	public static void main(String[] args)  throws Exception
	{
		char[] a={'a','b','c'};
		//1、创建一个FileWriter对象,该对象一被初始化,就必须要明确被操作的文件,
		//而且该文件会被创建到指定目录下,如果该目录下已有同名文件,则将其覆盖,
		//其实该步就是在明确数据要存放的目的地。
		FileWriter f=new FileWriter("abc.txt");
		//2、调用写入方法,将字符串等对象写入到流中。
		f.write("asfdasdfas");
		//3、刷新流对象中缓冲区中的数据,将数据刷到目的地中。
		f.flush();
		f.write(a,1,2);
		f.flush();
		//4、关闭流资源,但是在关闭之前会刷新一次流对象中缓冲区中的数据,将数据刷新到目的地中,
		//和flush()区别:flush刷新后,流可以继续使用;close()后,流不可以被使用
		f.close();
	}
}
(2)对流的异常处理
import java.io.*;
public class IoThreateDemo 
{
	public static void main(String[] args) 
	{
		FileWriter f = null;       //1、在外部建立引用
		try
		{
			f=new FileWriter("k\\:abc.txt");//2、在内部进行初始化
			f.write("afdas");  //3、流操作
			f.flush();
		}
		catch(Exception e)
		{
			System.out.println(e.toString());
		}
		finally
		{//4、由于关闭流是个必须的操作,因此应当将close()放到finally语句中
			try
			{//5、由于close()方法也有异常声明,所以也应该处理
				if(f!=null)     //6、一定要判断流对象是否为null  
					f.close();  
			}
			catch(Exception e)
			{
				System.out.println(e.toString());
			}
		}
	}
}
(3)对已有文件的数据续写

即:

FileWriter f=new FileWriter("k\\:abc.txt",true);
2、Reader(读)

2.1、FileReader

import java.io.*;
public class Demo 
{
	public static void main(String[] args) 
	{
		FileReader f=null;
		try
		{
			f=new FileReader("abc.txt");
			//int c;
			//while((c=f.read())!=-1)         //方法一:read()方法每次读取一个字符,并将代表其的整数返回,		
			//	System.out.print((char)c);//若读到末尾(有特殊标识,系统定义的),则返回-1
			char[] c=new char[22];
			int num=f.read(c);                //方法二:read(char[] buf)方法每次将文件中的字符按照预先
			System.out.println(num);          //开辟好的字符数组存入,返回实际存入字符数组中字符的个数,
			System.out.println(c);            //如果到结尾,则返回-1。
		}
		catch(Exception e1)
		{
			System.out.println("打开资源失败");
		}
		finally
		{
			try
			{
				if(f!=null)
					f.close();
			}
			catch(IOException e2)
			{
				System.out.println("关资源失败");
			}
		}
	}
}
结果如下:


20表明文件里有20个字符,由于在windows系统里,换行为\r\n,则其占两个字符,因此为20个字符;同时因为开辟的是22字符的空间,所以最后又输出两个空格。

3、Copy练习

import java.io.*;
public class Copy 
{
	public static void main(String[] args) 
	{
		FileWriter fw=null;  //写流对象
		FileReader fr=null;  //读流对象
		try
		{
			fw=new FileWriter("C:\\Users\\LJ_Z\\Desktop\\abcd.txt"); //写入目标文件A
			fr=new FileReader("abc.txt");     //读出目标文件B
			char[] ch=new char[1024];
			int num;
			while((num=fr.read(ch))!=-1)
				fw.write(ch,0,num);
			fw.flush();
		}
		catch(IOException e)
		{
			throw new RuntimeException();
		}
		finally
		{
			try
			{//关写流对象的操作
				if(fw!=null)
					fw.close();
			}
			catch(IOException e)
			{
				System.out.println(e.toString());
			}
			try
			{//关读流对象的操作
				if(fr!=null)
					fr.close();
			}
			catch(IOException e)
			{
				System.out.println(e.toString());
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值