字节流+字符流

1、 IO流用来处理设备之间的数据传输
 a) 上传文件
 b) 下载文件
2、 Java对数据的操作都是通过流的方式
3、 Java 用于操作流的对象都在IO包中
4、 IO流分类
 a) 流向
  i. 输入流:程序读取数据
  ii. 输出流:程序向硬盘写入数据
 b) 数据类型
  i. 字节流:
   1. 字节输入流 读数据 InputStream
   2. 字节输出流 写数据 OutPutStream
  ii. 字符流:为了方便操作文本数据
   1. 字符输入流 读数据 Reader
   2. 字符输出流 写数据 Writer
 c) 默认按照数据类型进行分类。
5、基本流和高级流
 基本流:可以直接操作文件的
  FileInputStream
  FileOutputStream
  FileReader
  FileWriter
  …………
 高级流:在基本流基础上提供一些其他功能
 其中PrintStream、PrintStream既是基本流又是高级流
6、 总结
 a) 字符流复制数据5种方式:
  i. 字符缓冲区每次复制一个字符数组
  ii. 字符缓冲区每次复制一个字符
  iii. 每次复制一个字符数组
  iv. 每次复制一个字符
  v. 每次复制一行数据
 b) 字节流复制数据的4种方式
  i. 字节缓冲区每次复制一个字节数组
  ii. 字节缓冲区每次复制一个字节
  iii. 每次复制一个字节数组
  iv. 每次复制一个字节

 复制文件

publicclass CopyFileTest {

    publicstaticvoid main(String[] args) throws IOException {

        //1,明确源和目的。

        File srcFile = new File("c:\YesDir est.JPG");

        File destFile = new File("copyTest.JPG");

       

        //2,明确字节流 输入流和源相关联,输出流和目的关联。

        FileInputStream fis = new FileInputStream(srcFile);

        FileOutputStream fos = new FileOutputStream(destFile);

       

        //3, 使用输入流的读取方法读取字节,并将字节写入到目的中。

        int ch = 0;

        while((ch=fis.read())!=-1){

            fos.write(ch);

        }

        //4,关闭资源。

        fos.close();

        fis.close();

    }

}

上述代码输入流和输出流之间是通过ch这个变量进行数据交换的。

上述复制文件有个问题,每次都从源文件读取一个,然后在写到指定文件,接着再读取一个字符,然后再写一个,一直这样下去。效率极低

   缓冲数组方式复制文件

publicclass CopyFileByBufferTest {

    publicstaticvoid main(String[] args) throws IOException {

        File srcFile = new File("c:\YesDir est.JPG");

        File destFile = new File("copyTest.JPG");

        // 明确字节流 输入流和源相关联,输出流和目的关联。

        FileInputStream fis = new FileInputStream(srcFile);

        FileOutputStream fos = new FileOutputStream(destFile);

        //定义一个缓冲区。

        byte[] buf = newbyte[1024];

        int len = 0;

        while ((len = fis.read(buf)) != -1) {

            fos.write(buf, 0, len);// 将数组中的指定长度的数据写入到输出流中。

        }

        // 关闭资源。

        fos.close();

        fis.close();

    }

}

速度要快

 

复制文本文件

我们一般用字符流复制文本文件

publicclass CopyTextFileTest {

    publicstaticvoid main(String[] args) throws IOException {

        copyTextFile();

    }

    publicstaticvoid copyTextFile() throws IOException {

        //1,明确源和目的。

        FileReader fr = new FileReader("c:\cn.txt");

        FileWriter fw = new FileWriter("c:\copy.txt");

        //2,为了提高效率。自定义缓冲区数组。字符数组。

        char[] buf = newchar[1024];

        int len = 0;

        while((len=fr.read(buf))!=-1){

            fw.write(buf,0,len);

        }

        /*2,循环读写操作。效率低。

        intch = 0;

        while((ch=fr.read())!=-1){

            fw.write(ch);

        }

        */

        //3,关闭资源。

        fw.close();

        fr.close();

    }

}

原文地址:https://www.cnblogs.com/sy130908/p/11474416.html