java IO输入输出流笔记

本文详细介绍了Java中的IO流,包括输入流和输出流的分类,字节流和字符流的区别及用法,如FileInputStream、FileOutputStream、FileReader、FileWriter的使用。此外,还涵盖了缓冲流、转换流的作用,以及如何处理乱码问题。同时,提到了节点流和处理流的实例,如ByteArrayInputStream和BufferedInputStream等,并强调了关闭流的重要性。
摘要由CSDN通过智能技术生成

1、原理与概念

一、概念
流:流动 、流向 从一端移动到另一端  源头与目的地
程序 与  文件|数组|网络连接|数据库  ,以程序为中心
二、IO流分类
1、流向: 输入流与输出流
2、数据:字节流:二进制,可以一切文件 包括  纯文本 doc 音频、视频等等
    字符流:文本文件,只能处理纯文本
3、功能:节点:包裹源头
    处理:增强功能,提供性能
三、字符流与字节流 (重点) 与文件
1、字节流
    输入流:InputStream  read(byte[] b) 、read(byte[] b, int off, int len)  +close()
     FileInputStream()
    输出流:OutputStream write(byte[] b)  write(byte[] b, int off, int len)  +flush() +close()
     FileOutputStream
2、字符流
   输入流:Reader read(char[] cbuf) read(char[] cbuf, int off, int len)  +close()
    FileReader()
   输出流:Writer  write(char[] cbuf) write(char[] cbuf, int off, int len) +flush() +close()
              write(String str, int off, int len)
    FileWriter()
四、操作
1、举例:搬家                 -->读取文件
   1)、关联房子              --->建立与文件联系
   2)、选择搬家               -->选择对应流
   3)、搬家        -->读取|写出
    a)、卡车大小    --->数组大小
    b)、运输    -->读取、写出
   4)、打发over        -->释放资源
2、操作
1)建立联系
2)选择流
3)操作  数组大小+read 、write
4)释放资源

2、字节流

字节流:可以处理一切文件,包括二进制 音频、视频 、doc等
节点流:   InputStream FileInputStream
      OutputStream FileOutputStream

一、读取文件
1、建立联系   File对象 源头
2、选择流     文件输入流  InputStream FileInputStream
3、操作  : byte[] car =new byte[1024];  +read+读取大小
              输出
4、释放资源 :关闭
二、写出文件
1、建立联系   File对象  目的地
2、选择流     文件输出流  OutputStream FileOutputStream
3、操作  :  write() +flush
4、释放资源 :关闭
三、文件拷贝 程序为桥梁
1、建立联系   File对象   源头 目的地
2、选择流     
     文件输入流  InputStream FileInputStream
      文件输出流  OutputStream FileOutputStream
3、操作  :  拷贝
     byte[] flush =new byte[1024];
     int len =0;
      while(-1!=(len=输入流.read(flush))){  
         输出流.write(flush,0,len)
      }
             输出流.flush
4、释放资源 :关闭 两个流
四、文件夹拷贝
1、递归查找子孙级文件|文件夹
2、文件 复制(IO流复制)
     文件夹  创建
3、   A
      /    \
    a.txt  b
             |
            b.txt

         AA
          |
          A
        /    \
      a.txt b
              |
              b.txt  
4、不能将父目录拷贝到子目录中
    删除超长目录

3、字符流

字符流:只能处理 纯文本,全部为可见字符  .txt  .html
节点流 Reader FileReader
          Writer FileWriter
一、纯文本读取
1、建立联系
2、选择流 Reader FileReader
3、读取 char[] flush =new char[1024];
4、关闭
二、纯文本写出
1、建立联系
2、选择流   Writer FileWriter
3、读取 write(字符数组,0,长度)+flush
    write(字符串)
    append(字符|字符串)
4、关闭


4、处理流

处理流:增强功能、提供性能,节点流之上
一、缓冲流
1)、字节缓冲流
BufferedInputStream
BufferedOutputStream
2)、字符缓冲流
BufferedReader   readLine()
BufferedWriter    newLine()
二、转换流: 字节流 转为字符流   处理乱码(编码集、解码集)
1、编码与解码概念
 编码:  字符   ---编码字符集>二进制
 解码 : 二进制   --解码字符集->      字符
2、乱码:
1)编码与解码的字符集不统一
2)字节缺少,长度丢失
3、文件乱码
InputStreamReader(字节输入流,"解码集")
OutputStreamWriter(字符输出流,"编码集")


5、其他流

一、节点流
1、字节数组 字节 节点流
    输入流:ByteArrayInputStream      read(byte[] b, int off, int len)  + close()
    输出流:ByteArrayOutputStream   write(byte[] b, int off, int len)  +toByteArray()   不要使用多态
二、处理流
1、基本类型+String  保留数据+类型
  输入流:DataInputStream    readXxx
  输出流:DataOutputStream  writeXxx
2、引用类型 (对象) 保留数据+类型
   反序列化 输入流:ObjectInputStream  readObject()
   序列化  输出流:ObjectOutputStream  writeObject()
  注意:
1)、先序列化后反序列化;反序列化顺序必须与序列化一致
2)、不是所有的对象都可以序列化, java.io.Serializable
      不是所有的属性都需要序列化,transient


3、打印流 PrintStream  println() print()
4、三个常量 : System.in /out/err   System.setIn() setOut() setErr()


6、关闭方法

1、编写工具类,实现关闭功能


7、总结

一、步骤: 创建源 选择流 操作(读取|写出) 释放

二、流

节点流:离数据源|程序最近的流

处理流:装饰模式 提高性能增强功能

1、 字节流:可以处理一切(纯文本、音频、视频等)

1)、输入流 InputStream FileInputStream

ByteArrayInputStream

操作:read(字节数组)

 a)、中间容器  byte[] flush=new byte[长度]

 b)、接收长度  int len =0;

c)、循环读取 while(-1!=(len=流.read(flush))){}

 d)、操作:输出、拷贝

2)、输出流 OutputStream FileOutputStream

ByteArrayOutputStream

操作:write(字节数组,0,长度)  输出

2、 字符流:只能处理纯文本

1)、输入流:Reader FileReader

操作:read(字符数组)

a)、中间容器  char[] flush=new char[长度]

b)、接收长度  int len =0;

c)、循环读取 while(-1!=(len=流.read(flush))){}

d)、操作:输出、拷贝

2)、输出流:Writer FileWriter

操作:write(字符数组,0,长度)  输出

1、 转换流:解码与编码字符集问题

1)、输入流:InputStreamReader à解码

2)、输出流:OutputStreamWriter—>编码

2、缓冲流:提高性能

   1)、输入流:BufferedInputStream BufferedReader

   2)、输出流:BufferedOutputStream BufferedWriter

3、处理数据+类型

1)、基本+字符串:必须存在才能读取 读取与写出顺序一致

   a)、输入流:DataInputStream readXxx

   b)、输出流:DataOutputStream writeXxx

2)、引用类型:Serializable transient

   a)、反序列化:ObjectInputStream readObject

   b)、序列化:ObjectOutputStream writeObject

4、打印流: PrintStream

5、System.in out err  setIn setOut

以下流使用新增方法不能发生多态

1ByteArrayOutputStream:  toByteArray()

2BufferedReader: readLine()

3BufferedWriter:newLine()

4DataInputStream DataOutputStream

5ObjectInputStream ObjectOutputStream

6PrintStream

 

三、重点

四、操作
0、打印文件|目录
1、文件拷贝
2、关闭流方法
3、文件分割与合并(自学)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值