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

来源:互联网 发布:苹果手机拨号软件 编辑:程序博客网 时间:2024/05/29 04:55
------- 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培训、期待与您交流! ----------
0 0
原创粉丝点击