IO 字符流 FileWriter IO异常的处理 字符数据续写 FileReader 复制原理:

IO

用于处理设备之间的数据传输

流按流向分输入流  和  输出流

流按操作数据分类 字节流  和 字符流

字节流的抽象基类

InputStreamOutputStream

字符流的抽象基类

Reader Writer


字符流的特点
既然IO流是用来操作数据的,
那么数据的最常见体现形式是:文件。

writer
那么先以操作文件为主,
需求,在硬盘上,创建一个文件并写入一些文字数据。
找到一个专门用于操作文件的Writer子类对象,FileWriter。

后缀名师父类名,前缀名是该类对象的功能。
FileWrite 创建文件   
write 往文件内写字符

flush 刷新

close 关闭流资源
close和flush区别

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

close刷新后,会将流关闭。

FileWriter fw = new FileWriter("hello.txt");

import java.io.*;
class Test
{
	public static void main(String[] args)	throws IOException 
	{
		//创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件。
		//而且该文件会被创建到指定目录下,如果该目录下已有同名文件,将被覆盖。
		//其实该步就是在明确数据要存放的目的地。	  
		FileWriter fw = new FileWriter("demo.txt");
		
		//调用write方法,将字符串写入流中。
		fw.write("123333333333");
		
		//刷新流对象中的缓冲中的数据
		//将数据刷到目的地中
		fw.flush();
		
		//关闭流资源,关闭之前,会刷新一次内部的缓冲数据。
		//将数据刷到目的地中。
		//和flush区别,flush刷新后,流可以继续使用,close刷新后,会将流关闭。
		fw.close();
	}
	public static void sop( Object obj)
	{
		System.out.println(obj);
	}
}
IO异常的处理方式

import java.io.*;
class Test
{
	public static void main(String[] args)
	{
		FileWriter f=null;
		try
		{
			f = new FileWriter("demo.txt");
			f.write("213123123213");
		}
		catch (IOException e)
		{
			sop(e.toString());
		}
		finally
		{
			try
			{
				if (f!=null)
				f.close();	
			}
			catch (IOException e)
			{
			}
		}
	}
	public static void sop( Object obj)
	{
		System.out.println(obj);
	}
}

对已有文件的数据续写

加true,当文件存在时,在文件尾部添加内容。

当文件不存在时,创建文件,在头部添加内容。

FileWriter fw = new FileWriter("hello.txt",true);

import java.io.*;
class Test
{
	public static void main(String[] args)
	{

		//传递一个true函数,代表不覆盖已有文件。并在已有文件的末尾处,进行数据续写。
		FileWriter fw = null;
		try
		{
			fw=new FileWriter("demo.txt",true);
			fw.write("12312\r\n3123");
		}
		catch (IOException e)
		{
			sop(e.toString());
		}
		finally
		{
			try
			{
				if(fw!=null)
					fw.close();
			}
			catch (IOException e)
			{
			}
		}		
	}
	public static void sop( Object obj)
	{
		System.out.println(obj);
	}
}
Reader

方法1和方法2

当read()字符读取完字符时,返回-1;

fr.read(char[])返回的是读到的字符个数。

import java.io.*;
class Test
{
	public static void main(String[] args) throws IOException
	{
		//创建一个文件读取流对象,和指定名称的文件相关联。
		//要保证该文件是已经存在的,如果不存在,会发生异常FileNotFountException
		//方法一,调用读取流对象的read方法。
		//read();一次读一个字符,而且会自动往下读。
		FileReader fr = new FileReader("demo.txt");
		int ch=0;
		while ((ch=fr.read())!=-1)
		{
			sop((char)ch);
		}
		fr.close();
//
		//方法二,通过字符数组进行读取。
		//定义一个字符数组,用于存储读到的字符
		//该read(char[])返回的是读到字符个数。
		FileReader fr2 = new FileReader("demo.txt");
		char [] buf = new char[1024]; //一般设为1024
		int num=0;
		while ((num=fr2.read(buf))!=-1)
		{
			sop(num+"--"+new String(buf,0,num));
		}
		fr2.close();
	}
	public static void sop( Object obj)
	{
		System.out.println(obj);
	}
}

练习读取打印

/*
练习
读取一个.java文件,并打印在控制台上。
如果用第二种打法,尽量不要用ln换行。。。
*/	
import java.io.*;
class Test
{
	public static void main(String[] args) throws IOException
	{
		FileReader fr = new FileReader("1.java");
		char [] buf = new char[1024];
		int num=0;
		while ((num=fr.read(buf))!=-1)
		{
			sop(new String(buf,0,num));
		}
		fr.close();
	}

	public static void sop( Object obj)
	{
		System.out.println(obj);
	}
}

将c盘一个文本文件复制到d盘
复制原理:
其实就是将C盘下的文件数据存储到D盘的一个文件中

步骤
1在D盘创建一个文件,用于存储C盘文件中的数据。
2定义读取流和C盘文件关联
3通过不断的读写完成数据存储
4关闭资源

/*
将c盘一个文本文件复制到d盘

复制原理:
其实就是将C盘下的文件数据存储到D盘的一个文件中

步骤
1在D盘创建一个文件,用于存储C盘文件中的数据。
2定义读取流和C盘文件关联
3通过不断的读写完成数据存储
4关闭资源
*/	
import java.io.*;
class Test
{
	public static void main(String[] args) throws IOException
	{
		copy1();
		copy2();
	}
	//从C盘都一个字符,就往D盘写一个字符
	public static void copy1()throws IOException
	{
		//创建目的地
		FileWriter fw = new FileWriter("hello.java");
		//与已有文件关联
		FileReader fr = new FileReader("1.java");

		int ch = 0;
		while ((ch=fr.read())!=-1)
		{
			fw.write(ch);
		}
		fw.close();
		fr.close();
	}
	
	//第二种方式
	public static void copy2() 
	{
		FileWriter fw = null;
		FileReader fr = null;	
		try
		{
			fw = new FileWriter("hello2.java");
			fr = new FileReader("2.java");
			char [] buf = new char[1024];
			int len = 0 ;
			while ((len=fr.read(buf))!=-1)
				{
					fw.write(buf,0,len);
				}
		}
		catch (IOException e)
		{
			throw new RuntimeException("读写失败");
		}
		finally
		{
			if (fw!=null)
				try
				{
					fw.close();
				}
				catch (IOException e )
				{
				}
			if (fr!=null)
				try
				{
					fr.close();
				}
				catch (IOException e )
				{
				}
		}
		
	}
	
	public static void sop( Object obj)
	{
		System.out.println(obj);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值