IO流

来源:互联网 发布:温饱而知廉耻 编辑:程序博客网 时间:2024/06/05 12:49

package com.java;

 

importjava.io.BufferedInputStream;

importjava.io.BufferedOutputStream;

importjava.io.BufferedReader;

importjava.io.BufferedWriter;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileNotFoundException;

importjava.io.FileOutputStream;

importjava.io.FileReader;

importjava.io.FileWriter;

importjava.io.IOException;

 

importorg.junit.Test;

 

/*

 * 重点!

 *  *抽象基类              节点流(或文件流)             缓冲流(处理流的一种,提高数据读写的效率)

 *  InputStream   FileInputStream        BufferedInputStream(read(byte[]b))

 *  OutputStream     FileOutputStream      BufferedOutputStream(write(b,0,len)/flush())

 *  Reader             FileReader             BufferedReader(read(char[] c)/ readLine())

 *  Writer               FileWriter              BufferedWriter(write(c,0,len)/write(Stringstr) flush())

 */

public classTestBuffered {

      /*

       * 结论:

       * 对于文本文件:建议使用BufferedReader / BufferedWriter

       * 对于非文本文件(图片、视频、二进制文件、pdf):BufferedInputStream / BufferedOutputStream

       */

      @Test

      public void testBufferedReaderWriter() {

           BufferedReader br = null;

           BufferedWriter bw = null;

           try {

                 br = new BufferedReader(newFileReader(new File("dbcp.txt")));

                bw = new BufferedWriter(newFileWriter(new File("dbcp1.txt")));

 

                 //方式一:read(char[] c)

//             char[] c = new char[20];

//             intlen;

//             while((len = br.read(c)) != -1) {

//                   bw.write(c,0, len);

//                   bw.flush();

//             }

                 //方式二:readLine()

                 Stringstr;

                 while((str= br.readLine()) != null){

                      bw.write(str);

                      bw.newLine();

                      bw.flush();

                 }

核心代码

核心代码

                

           } catch (FileNotFoundException e) {

                 // TODO Auto-generated catchblock

                 e.printStackTrace();

           } catch (IOException e) {

                 // TODO Auto-generated catchblock

                 e.printStackTrace();

           } finally {

                 if (bw != null) {

                      try {

                            bw.close();

                      } catch (IOException e) {

                            // TODOAuto-generated catch block

                            e.printStackTrace();

                      }

 

                 }

                 if (br != null) {

                      try {

                            br.close();

                      } catch (IOException e) {

                            // TODOAuto-generated catch block

                            e.printStackTrace();

                      }

 

                 }

           }

 

      }

 

      @Test

      public void testCopyFile() {

           long start =System.currentTimeMillis();

 

           String src ="C:\\Users\\shkstart\\Desktop\\1.avi";

           String dest ="C:\\Users\\shkstart\\Desktop\\3.avi";

 

           copyFile(src, dest);

 

           long end =System.currentTimeMillis();

           System.out.println("花费的时间为:" + (end - start));// 4052

      }

 

      // 使用缓冲流实现文件复制的方法

      public void copyFile(String src, Stringdest) {

           BufferedInputStream bis = null;

           BufferedOutputStream bos = null;

           try {

                 // 1.创建File类的对象

                 File file1 = new File(src);

                 File file2 = new File(dest);

                 // 2.创建相应的节点流:FileInputStream 和 FileOutputStream

                 FileInputStream fis = newFileInputStream(file1);

                 FileOutputStream fos = newFileOutputStream(file2);

 

                 // 3.创建相应的缓冲流:BufferedInputStream 和 BufferedOutputStream

                 bis = newBufferedInputStream(fis);

                 bos = newBufferedOutputStream(fos);

 

                 // 4.具体的文件复制的操作:readwrite

                 byte[]b = new byte[1024];

                 intlen;

                 while((len = bis.read(b)) != -1) {

                      bos.write(b,0, len);

                      bos.flush();

                 }

           } catch (IOException e) {

                 // TODO Auto-generated catchblock

                 e.printStackTrace();

           } finally {

                 if (bos != null) {

                      try {

                            bos.close();

                      } catch (IOException e) {

                            // TODOAuto-generated catch block

                            e.printStackTrace();

                      }

                 }

                 if (bis != null) {

                      try {

                            bis.close();

                      } catch (IOException e) {

                            // TODOAuto-generated catch block

                            e.printStackTrace();

                      }

 

                 }

           }

 

           // fos.close();

           // fis.close();

 

      }

 

      /*

       * 使用BufferedInputStream 和 BufferedOutputStream实现文件的复制

       */

      @Test

      public void testBuffered1() {

           BufferedInputStream bis = null;

           BufferedOutputStream bos = null;

           try {

                 // 1.创建File类的对象

                 File src = newFile("C:\\Users\\shkstart\\Desktop\\捕获.jpg");

                 File dest = newFile("C:\\Users\\shkstart\\Desktop\\捕获_1.jpg");

                 // 2.创建相应的节点流:FileInputStream 和 FileOutputStream

                 FileInputStream fis = newFileInputStream(src);

                 FileOutputStream fos = newFileOutputStream(dest);

 

                 // 3.创建相应的缓冲流:BufferedInputStream 和 BufferedOutputStream

                 bis = new BufferedInputStream(fis);

                 bos= new BufferedOutputStream(fos);

 

                 // 4.具体的文件复制的操作:read write

                 byte[] b = new byte[20];

                 intlen;

                 while((len = bis.read(b)) != -1) {

                      bos.write(b,0, len);

                      bos.flush();

                 }

           } catch (IOException e) {

                 // TODO Auto-generated catchblock

                 e.printStackTrace();

           } finally {

                 if (bos != null) {

                      try {

                            bos.close();

                      } catch (IOException e) {

                            // TODOAuto-generated catch block

                            e.printStackTrace();

                      }

                 }

                 if (bis != null) {

                      try {

                            bis.close();

                      } catch (IOException e) {

                            // TODOAuto-generated catch block

                            e.printStackTrace();

                      }

 

                 }

           }

 

           // fos.close();

           //fis.close();

 

      }

 

}