Java基础——IO流

 ------- android培训java培训、期待与您交流! ----------

字符流的特点:

数据最常见的体现形式是:文件

需求:在硬盘上,创建一个文件,并写入一些文字数据。

用于操作操作文件的Writer的子类FileWriter,后缀名是父类名。前缀名是该流对象的功能。
操作步骤:
1.创建一个FileWriter对象。该对象一被初始化就必须明确要被操作的文件,该文件会被创建到指定目录下,如果该目录下已经有同名文件,将被覆盖
FileWriter fw=new FileWriter("demo.txt");
2.调用write方法,将字符串写入到流中。
fw.write();
3.刷新流对象中的缓冲中的数据,将数据刷到目的地
fw.flush();
4.关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据,将数据刷到目的地中。和flush的区别,flush刷新后,流可以继续使用,close刷新后
将会将流关闭。
fw.close();

练习 :读取一个.java文件。并打印在控制台上。	
FileReader fr=null;
		char[] buf=new char[1024];
		int num=0;
		try {
			fr= new FileReader("a.txt");
			
			try {
				while((num=fr.read(buf))!=-1){
					System.out.print(new String(buf,0,num));
				}
			} catch (IOException e) {
				
				e.printStackTrace();
			}
			
			
			
		} catch (FileNotFoundException e) {
			
			e.printStackTrace();
		}
		finally
		{
				   try {
                               if(fr!=null)
					fr.close();
				} catch (IOException e) {
					
					e.printStackTrace();
				}		
		}
————————————————————————————————————————————————

字符流的缓冲区
缓冲区的出现提高了对数据的读写效率
对应类:
BUfferWriter
BufferedReader
特点:缓冲区要结合流才可以使用,在创建缓冲区之前,必须要有流对象。在流的基础上对流的功能进行了增强。
BUfferWriter步骤:
1.创建一个字符写入流对象
FileWriter fw=new FileWriter("a.txt");
2.将需要被提高效率的流对象作为参数传递给缓冲区的构造函数
bufferedWriter bufw=new BufferedWriter(fw);
buff.write("asdasdas");
bufw.newLine();//换行符,跨平台的
3.将缓冲区刷新
bufw.flush;
4.关闭缓冲区,就是在关闭缓冲区中的流对象
bufw.close();


BufferedReader步骤
1.创建一个字符写入流对象
FileReader fr=new FileReader ("a.txt");
2.将需要被提高效率的流对象作为参数传递给缓冲区的构造函数
BufferedReader bufr=new BufferedReader (fr);
3.读取流对象:该缓冲区提供了一个一次读取一行的方法。当返回null时表示,文件读到末尾
String line=null;
while((line=bufr.readLine())!=null)
{
String s=line;}
4.关闭
bufr.close();


readLine()方法的原理:
无论是读一行,获取多个字符,最终都是在硬盘上一个一个读取,最终使用额还是read方法一次读一个的方法。
缓冲区练习.:通过缓冲区复制一个文件

    BufferWriter bufw=null;
	 BufferReader bufr=null;
	  try {
		  bufw=new BufferWriter(new FileWriter("b.txt"));
		  bufr=new BufferReader(new FileReader("a.txt"));
		 String line=null;
		  while ((line=buffr.read(buf))!=null){
			  bufw.write(line);
                    bufw.newLine();
                    bufw.flsuh;
		  }
	}
	  catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	  finally
		{
		   try {
				fr.close();
			} catch (IOException e) {
				
				e.printStackTrace();
			}		
			   
		   try {
				fw.close();
			} catch (IOException e) {
				
				e.printStackTrace();
			}		
		}
————————————————————————————————————————————————

操作图片数据就要用到字节流。
字符流使用的是字符数组char[],字节流使用的是字节数组byte[]。
字节流:
InputStream 读
Outputstream 写

读取
FileInputStream fis=new FileInputStream ("a.txt");
byte[] buf=new byte[fis].available(0)];//定义一个刚刚好的缓冲区,不用再循环了
fis.read(buf);
System.out.println(new String(buf));
fis.close();

练习:复制图片

        FileOutputStream fw=null;
	  FileInputStream fr=null;
	  try {
		  fos=new FileOutputStream("b.jpg");
		  fis=new FileInputStream("a.jpg");
		  byte[] buf=new byte[1024];
		  int num=0;
		  while ((num=fis.read(buf))!=-1){
			 fis.write(buf,0,num);
		  }
	}
	  catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	  finally
		{
		   try {
                      if(fis!=null)
				fis.close();
			} catch (IOException e) {
				
				e.printStackTrace();
			}		
			   
		   try {
				fos.close();
			} catch (IOException e) {
				
				e.printStackTrace();
			}		
		}
————————————————————————————————————————————

读取键盘录入

System.out:对应的是标准输出设备,控制台
System.in:对应的标准输入设备,键盘

代码 
InputStream in=System.in;
  int by=in.read();
   sop(by);
结束录入 

  in.close
————————————————————————————————————————

转换流

读取转换流:InputStreamReader
写入转换流:OutputStreamReader


读取转换流:InputStreamReader 字节流通向字符流的桥梁

步骤 
1.获取键盘录入对象
Inputstream in=System.in
2.将字节流对象转换成字符流对象,使用转换流InputStreamReader 
InputStreamReader isr=new InputStreamReader(in);
3.提高效率使用字符流缓冲区 BufferedReader进行读取
BufferedReader bf=new BufferedReader(is);
String line=null;
while((line=bf.readLine())!=null)
{
    if("over".equals(line))
     break;
    sop(line);
}
bufr.close;



写入转换流:OutputStreamReader 字符流通向字节流的桥梁

步骤 
1.获取输出对象
Outputstream out=System.out
2.将字符流对象转换成字节流对象,使用转换流OutputstreamWriter 
OutputstreamWriter osw=new OutputstreamWriter(out);
3.提高效率使用字符流缓冲区 BufferedWriter进行写入
BufferedWriter bw=new BufferedWriter(osw);
String line=null;
while((line=bf.readLine())!=null)
{
    if("over".equals(line))
     break;
    bw.write(line);
    bufw.newLine();
}
bufr.close;
——————————————————————————————————————————————————————

转换流

读取转换流:InputStreamReader
写入转换流:OutputStreamReader


读取转换流:InputStreamReader 字节流通向字符流的桥梁

步骤 
1.获取键盘录入对象
Inputstream in=System.in
2.将字节流对象转换成字符流对象,使用转换流InputStreamReader 
InputStreamReader isr=new InputStreamReader(in);
3.提高效率使用字符流缓冲区 BufferedReader进行读取
BufferedReader bf=new BufferedReader(is);
String line=null;
while((line=bf.readLine())!=null)
{
    if("over".equals(line))
     break;
    sop(line);
}
bufr.close;



写入转换流:OutputStreamReader 字符流通向字节流的桥梁

步骤 
1.获取输出对象
Outputstream out=System.out
2.将字符流对象转换成字节流对象,使用转换流OutputstreamWriter 
OutputstreamWriter osw=new OutputstreamWriter(out);
3.提高效率使用字符流缓冲区 BufferedWriter进行写入
BufferedWriter bw=new BufferedWriter(osw);
String line=null;
while((line=bf.readLine())!=null)
{
    if("over".equals(line))
     break;
    bw.write(line);
    bufw.newLine();
}
bufr.close;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值