黑马程序员--字符流

<span style="font-family:SimSun;font-size:14px;">
</span>

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1IO知识

1IO的作用:1、IO流用来处理设备之间的数据传输。2、Java对数据的操作是通过流的方式。 3、Java用于操作流的对象都封装在IO包中。 4、流按操作数据分为两种:字节流与字符流。 5、流按流向分为:输入流,输出流。

2IO分类:

  1字符流的抽象基类 
Reader,Writer
  2字节流的抽象基类 
InputStrea,OutputStream 

3既然IO流是用于操作数据的, 那么数据的最常见体现形式是:文件。 那么先以操作文件为主来演示。

2演示

1.创建一个文件,并写入一些数据;

<span style="font-family:SimSun;font-size:14px;">FileWriter ft=null;
		try
		{
			ft=new FileWriter("demo.txt",true);//传递一个参数,但不覆盖已有的文件
			ft.write("ffff");
		}
		catch (Exception e)
		{
			sop(e.toString());
		}
		finally
		{
			try
			{
				if (ft!=null)
				{
					ft.close();
				}
			}
			catch (Exception e)
			{
				sop(e.toString());
			}
			
		}</span>
2-1从已有的文件中读取数据,利用读一个字符,并打印到控制台上

<span style="font-family:SimSun;font-size:14px;">import java.io.*;
class reader10
{
	public static void main(String[] args) throws Exception
	{
		FileReader fr=new FileReader("demo.txt");
		int ch=0;
		while ((ch=fr.read())!=-1)
		{
			System.out.println((char) ch);
		}
		fr.close();
	}
}</span>

2-2从已有的文件中读取数据,通过字符数组进行读取,并打印到控制台上

<span style="font-family:SimSun;font-size:14px;">import java.io.*;
class reader11
{
	public static void main(String[] args) throws Exception
	{
		FileReader fr=new FileReader("demo.txt");
		char[] arr=new char[3];
		int num=3;
		while ((num=fr.read(arr))!=-1)
		{
			System.out.println(num+new String(arr,0,num));

		}
		fr.close();
	}
}</span>
3.读取一个文件.java,并打印到控制台上

<span style="font-family:SimSun;font-size:14px;">FileReader fw=null;
		char[] arr=new char[1024];
		int num=0;
		try
		{
			fw=new FileReader("demo.txt");
			while ((num=fw.read(arr))!=-1)
			{
				System.out.println(new String(arr,0,num));
			}
		}
		catch (Exception e)
		{
		}
		finally
		{
			try
			{
				if (fw!=null)
				{
					fw.close();
				}
			}
			catch (Exception e)
			{
			}
			
		}</span>
4将c盘的文件数据存储到d盘的一个文件中

<span style="font-family:SimSun;font-size:14px;">FileReader fr=null;
			FileWriter fw=null;
			char[] arr=new char[1024];
			int ch=0;
			try
			{
				fr=new FileReader("f:\\javasw.txt");
				fw=new FileWriter("cxc.txt");
				while ((ch=fr.read(arr))!=-1)
				{
					fw.write(new String(arr,0,ch),0,ch);
				}
			}

			catch (Exception e)
			{
				throw new RuntimeException("读写失败");
			}
			
			finally 
			{
				try
				{
					if (fr!=null)
					{
						fr.close();
					}
					
				}
				catch (Exception e)
				{

				}
				try
				{
					if (fw!=null)
					{
						fw.close();
					}
					
				}
				catch (Exception e)
				{
					

				}
			}</span>
<span style="font-family:SimSun;font-size:14px;">5字符流的缓冲区
1、缓冲区的出现提高了对数据的读写效率。
2、对应类。
(1)、BufferedWriter
(2)、BufferedReader
3、缓冲区要结合流才可以使用。
4、在流的基础上对流的功能进行了增强。
</span>


5.1举例:输出流缓冲区

<span style="font-family:SimSun;font-size:14px;">BufferedWriter bufw=new BufferedWriter(new FileWriter("demo.txt"));
		for (int x=0;x<5 ;x++ )
		{
			bufw.write("abcde");
			bufw.newLine();
			bufw.flush();


		}
		bufw.close();</span>
5.2举例:输入流缓冲区

<span style="font-family:SimSun;font-size:14px;">BufferedReader bufr=new BufferedReader (new FileReader("demo.txt"));
		String ss=null;
		while ((ss=bufr.readLine())!=null)
		{
			System.out.println(ss);
		}
		bufr.close();</span>
<span style="font-family:SimSun;font-size:14px;">6字符缓冲区的readLine(): 读取一个文本行。返回:包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null ,所有要手动写入换行.</span>
<span style="font-family:SimSun;font-size:14px;">举例:模拟一个带行号的缓冲区</span>
<pre name="code" class="java"><span style="font-family:SimSun;font-size:14px;">import java.io.*;
class LineNumberReader1 extends BufferedReader

{
	
	private int LineNumber;
	LineNumberReader1(Reader r)
	{
		super(r);
	}
	public void set(int LineNumber)
	{
		this.LineNumber=LineNumber;

	}
	public int  get()
	{
		return LineNumber;
	}
	public String readLine() throws IOException
	{
		LineNumber++;
		return super.readLine();
		
	}
	

}
class LineNumber
{
	public static void main(String[] args) throws Exception
	{
		LineNumberReader1 lnr=new LineNumberReader1(new FileReader("f:\\javasw.txt"));
		String line=null;
		lnr.set(100);
		while ((line=lnr.readLine())!=null)
		{
			System.out.println(lnr.get()+"...."+line);
		}
		lnr.close();

	}
}</span>


 








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值