day9IO流

字符字节流

FileWriter字符输出流

  • 输出操作,对应的File如果不存在,在输出的过程中,会自动创建此文件

  • 如果存在,流使用的构造器是FileWriter(file)则会对原有文件进行覆盖

  • 如果使用的是FileWriter(file,true)则是在原有文件上追加内容

FileWriter和FileReader实现文件的复制

  1. 创建File类的对象,指明读入和写出的文件

  2. 创建输入流和输出流的对象

  3. 数据的读入和写出操作

  4. 资源的关闭

  • 不能使用字符流来处理图片等二进制文件

    public static void main(String[] args) {
       FileWriter fw =null;
       FileReader fr = null;
       try {
           //1.创建File类对象,指明要操作的文件
           File file1 = new File("Hello.txt");
           File file2 = new File("Hello1.txt");

           //2.创建输入流和输出流的对象
            fr =  new FileReader(file1);
            fw =  new FileWriter(file2,true);

           //3.数据的读入和写出
           char[] cbuf = new char[5];
           int len;
           while((len = fr.read(cbuf)) != -1 ){
               fw.write(cbuf,0,len);
              }
      } catch (IOException e) {
           e.printStackTrace();
      } finally {
           //4.资源的关闭操作
           try {
               if (fw != null)
               fw.close();
          } catch (IOException e) {
               e.printStackTrace();
          }
           try {
               if (fr != null)
               fr.close();
          } catch (IOException e) {
               e.printStackTrace();
          }

      }
  }

FileInputStream

  • 对于文本文件(.txt,.java,c,.cpp)使用字符流来处理

  • 对于非文本文件(.jpg,.mp3,.avi,.doc,.ppt)使用字节流来处理

缓冲流

  1. 创建File类的对象,指明读入和写出的文件

  2. 造流

    1. 造节点流,也就是字符流

    2. 造缓冲流

  3. 复制的细节,读取写入

  4. 资源关闭,先关外层的流,再关闭内层的流(在关闭外层流的同时内层流也会自动关闭)

处理流:就是“套接”在已有流的基础上

        BufferedInputStream bis = null;
       BufferedOutputStream bos = null;
       try {
           File file1 = new File("Hello.txt");
           File file2 = new File("Hello1.txt");

           FileInputStream fis = new FileInputStream(file1);
           FileOutputStream fos = new FileOutputStream(file2);

           bis = new BufferedInputStream(fis);
           bos = new BufferedOutputStream(fos);

           byte[] buffer = new byte[10];
           int len;
           while ((len = bis.read(buffer)) != -1){
               bos.write(buffer,0,len);
          }
      } catch (IOException e) {
           e.printStackTrace();
      } finally {
           if (bos != null) {
               try {
                   bos.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
           if (bis != null) {
               try {
                   bis.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
      }
  }

转换流(处理流的一种)

  • 转换流提供了在字节流和字符流之间的转换

  • Java API提供了两个转换流:

    • InputStreamReader:将InputStream转换为Reader

    • 实现将字节的输入流按指定字符集转换为字符的输入流。

    • 需要和InputStream“套接”。

    • 构造器

      • public InputStreamReader(InputStreamin)

      • public InputSreamReader(InputStreamin,StringcharsetName)

      • 如:Reader isr= new InputStreamReader(System.in,”gbk”);

    • OutputStreamWriter:将Writer转换为OutputStream

    • 实现将字符的输出流按指定字符集转换为字节的输出流。

    • 需要和OutputStream“套接”。

    • 构造器

      • public OutputStreamWriter(OutputStreamout)

      • public OutputSreamWriter(OutputStreamout,StringcharsetName)

  • 字节流中的数据都是字符时,转成字符流操作更高效。

  • 很多时候我们使用转换流来处理文件乱码问题。实现编码和解码的功能。

  •  

 

上一篇:接口处理时间打印


下一篇:4 — jsr303检验