『Java』IO--字符流基础

IO(Input Output)流

✔IO流用来处理设备之间的数据传输

✔Java对数据的操作是通过流的方式

✔Java用于操作流的对象都在IO包中

✔流按操作数据分为两种:字节流与字符流

✔流按流向分为:输入流,输出流

 

字符流:里面包含解码表(GBK,Unicode,ascii等)主要操作字符文字.可以指定编码表进行操作

 

IO流主要就是,围绕读写展开的

 

字节流两个基类:

InputStream OutputStream

 

字符流两个基类:

Reader Writer

 

字符流的特点.

既然IO流用于操作数据的,那么数据的最常见体现形式就是:文件

首先,在硬盘上,创建一个文件并写入一些文字数据玩玩.

找到一个专门操作文件的Writer子类对象,FileWriter,

后缀名是父类名,前缀名是该流对象的功能.

 

import java.io.*;
class FileWriterDemo
{
	public static void main(String[] args)throws IOException
	{
		/*到复制*****
		//创建并写入数据
		//创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件
		//而且该文件会被创建到制定的目录下.如果该目录下已有同名文件,将被覆盖
		//该步就是在明确数据要存放的目的地.
		
		FileWriter fw=null;
		
		try
		{
			//只要一 new就是一个新对象和一个新文件,想要续写的话就传递一个true参数.
			fw=new FileWriter("demo.txt",true);
			//调用write();方法,将字符长写入到流中.注意这里win下回车是\r
			fw.write("你好\r\n谢谢");
		//flush()刷新缓冲数据,将数据刷到目的地flush[冲洗]
			fw.flush();
		
		}
		catch(IOException e)
		{
			System.out.println(e.toString());
		}
		finally
		{
		//关闭流资源,关闭之前会刷新一次内部的缓冲数据,将数据刷到目的地中,最终都要关闭该流
		try
		{
			//进行判断,避免空指针异常.万一,new FileWriter没常见成功.
			if(fw!=null)//****
			fw.close();
		}
		catch(IOException e)
		{
			System.out.println(e.toString());
		}
		
			
		}
		
		//读取数据***********************
		//创建一个文件读取流对象,和指定名称的文件相关联.
		//要保证该文件是已经存在的,如果不存在,会发生异常.FileNotFoundException
		FileReader fr=new FileReader("demo.txt");
		
		
		//*****第一种,,调用读取流的read()方法,特性,自动往下读数据,到末尾会返回-1标识;
		while(true)第一种循环读取
		{
			int ch=fr.read();
			if(ch==-1)
				break;
			System.out.print((char)ch);
		}
		//第二种循环读取,,,顶...
		int ch=0;
		while((ch=fr.read())!=-1){
			System.out.print((char)ch);
		}

 

 

 

read读到结尾返回-1原理图示例

 

//******第二种方式:通过字符数组进行读取read(char[])*****
		
		//定义一个字符数组,用于存储读到的字符
		//该read(char[])返回的是读到字符个数,,,,读一个存一个,最后读完再输出
		char[] ch=new char[1024];//一般定义1024的整数倍
		int num=0;
		while((num=fr.read(ch))!=-1){
			System.out.print(new String(ch,0,num));
		}
		*/
		
		
		//******************复制
		//实际上就是,不断的读取
		//新建一个文件来接收,,要复制的数据.就是,复制后的文件
		FileWriter fw=new FileWriter("copy.txt");
		//制定要复制的文件
		FileReader fr=new FileReader("StringTest.txt");
		
		//第一种,,,循环读取.
		int num=0;
		/*while((num=fr.read())!=-1){//效率低,频繁读写
			fw.write((char)num);
		}*/
		
		
		//第二种先对来说,以下方式比较高效,读完1024写一次.
		char[] ch=new char[1024];
		while((num=fr.read(ch))!=-1){
					fw.write(ch,0,num);
		}

		
		//记着关掉流,有多少关多少..
		
		fw.close();
		fr.close();
	
	}
}

 

复制原理图示:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值