黑马程序员--java基础--io流(1)

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

 

目录:1、io流概述 2、字符流 3、IO异常处理方式4、IO流-BufferedWriter(缓冲流-写)  5、BufferedReader(字符流读取缓冲区)6、装饰和继承的区别 7、字节流的缓冲区

 

1、IO流

1,IO流用来处理设备之间的数据传输
2,Java对数据的操作都是通过流的方式
3,Java用于操作流的对象都在IO包中
4,流按操作数据分两种:字节流(通用),字符流(融合了编码表)
5,流按流向分:输入流,输出流

字节流的抽象基类:InputStream,OutputStream
字符流的抽象基类:Readr,Writer

2、字符流:
FileReader
FileWriter

BufferedReader
BufferedWriter

 

FileWrite

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

FileReader

import java.io.FileReader;
import java.io.IOException;

class FileReaderDemo {
 public static void main(String[] args)throws IOException
 {
  //创建一个文件读取流对象,和指定名称的文件相关联
  //要保证文件是已经存在的,如果不存在,会发生异常FileNotFoundException
  FileReader fr = new FileReader("Demo.txt");
  
  //调用读取流对象的read方法。
  //read():一次读一个字符。而且会自动往下读
  
  int ch = 0;
  while((ch=fr.read())!=-1) {
   System.out.println((char)ch);
  }
  /*
  while(true)
  {
   int ch = fr.read();
   if(ch==-1)
   break;
   System.out.println((char)ch);
  }
  */
  fr.close();
 }
}


 

3、IO异常处理方式

import java.io.FileWriter;
import java.io.IOException;
class FileWriteDemo2 {
 public static void main(String[] args)
 { 
  FileWriter fw = null;
  try
  {
   //这里需注意的是,写盘符一定要两个\比如:c:\\demo.txt
   fw = new FileWriter("demo.txt");
   
   fw.write("abcdddr");
  }
  catch(IOException e)
  {
   System.out.println("catch:"+e.toString());
  }
  finally
  {
   try//fw.close();也有异常,所以要继续捕获
   {
    if(fw!=null)//一定要判断不为空
    {
     fw.close();
    }
   }
   catch(IOException e)
   {
    System.out.println(e.toString());
   }
  }
 }
}

4、IO流-BufferedWriter(缓冲流-写)
缓冲区的出现是为了提高流的操作效率而出现的。
所以在创建缓冲区之前,必须要现有流对象。

该缓冲区中提供了一个跨平台的换行符方法
newLine();

 

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

/**
IO流-BufferedWriter演示
 */
class BufferedWriterDemo {
 public static void main(String[] args)throws IOException
 {
  //创建一个字符流对象buf.txt
  FileWriter fw = new FileWriter("buf.txt");
  
  //加入缓冲技术
  BufferedWriter bw = new BufferedWriter(fw);
  
  //演示换行newLine()
  for(int x=0;x<5;x++)
  {
   bw.write("abcde"+x);
   bw.newLine();
   bw.flush();
  }
  
  //关闭缓冲区
  bw.close();
 }
}


5、BufferedReader(字符流读取缓冲区)

该缓冲区中提供了一个一次读一行的方法readLine(),方便对文本数据的获取
当返回null时,表示读到文件末尾.
readLine()方法返回的时候值返回回车符之前的数据内容,并不返回回车符

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

/**
 * 演示BufferedReader
 */
class BufferedReaderDemo {
 public static void main(String[] args)throws IOException
 {
  //创建一个读取流对象
  FileReader fr = new FileReader("buf.txt");
  
  //创建一个读的流缓冲区对象
  BufferedReader br = new BufferedReader(fr);
  
  //演示一行一行读的方法readLine();
  String line = null;
  while((line = br.readLine())!=null)
  {
   System.out.println(line);
  }
  
  //关闭缓冲区
  br.close();
 }
}

6、装饰和继承的区别

装饰模式比继承要灵活,避免了继承体系的臃肿。
而且降低了类与类之间的关系。

装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。
所以装饰类和被装饰类通常都是一个体系当中的

字节流:
InputStream

OutputStream

BufferedInputSream
BufferedOutputSream

示例:字节流拷贝文件

class CopyPic {
 public static void main(String[] args)throws IOException
 {
    //拷贝的文件
  FileOutputStream fos = null;
 
  //源文件
  FileInputStream fis = null;
  
  try
  {
   fos = new FileOutputStream(d:\\2.jpg);

   fis = new FileInputStream(d:\\1.jpg);
   
   
   byte[] buf = new byte[1024];
   int ch = 0;
   while((ch=fis.read(buf))!=-1)
   {
    fos.write(buf,0,ch);
   }
  }
  catch(IOException e)
  {
   System.out.println("复制失败");
  }
  finally
  {
   try
   {
    if(fis!=null)
     fis.close();
   }
   catch(IOException e)
   {
    System.out.println("读取关闭失败");
   }
   
   try
   {
    if(fos!=null)
     fos.close();
   }
   catch(IOException e)
   {
    System.out.println("复制关闭失败");
   }
  }
 }
 
}
}

7、字节流的缓冲区

class CopyMp3 {
 public static void main(String[] args)throws IOException
 {
  long start = System.currentTimeMillis();
  copy_1();
  long end = System.currentTimeMillis();
  
  System.out.println((end-start)+"毫秒");
 }
 //通过字节流的缓冲区完成复制.
 public static void copy_1()throws IOException
 { 
  BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("H:\\1.mp3"));
  BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("H:\\2.mp3"));
  
  int by = 0;
  while((by = bufis.read())!=-1)
  {
   bufos.write(by);
  }

  bufos.close();
  bufis.close();
 }



 




 

 

------- android培训java培训、期待与您交流! ----------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值