Java——>IO

来源:互联网 发布:莎莎源码的解压密码 编辑:程序博客网 时间:2024/06/04 18:19

io

  • io
    Input / Output
    输入 / 输出

  • java.io 包

    File
    RandomAccessFile

    InputStream / OutputStream 字节流的抽象父类
    FileInputStream / FileOutputStream 插文件,直接读写文件数据
    BufferedInputStream / BufferedOutputStream 内存缓冲,提高单字节读写效率
    DataInputStream / DataOutputStream 固定字节格式 writeInt() writeDouble() writeUTF()
    PrintStream 任何数据转成字符串输出 print() println()
    ByteArrayInputStream / ByteArrayOutputStream 与内存中 byte[] 数组相接 toByteArray()
    ObjectInputStream / ObjectOutputStream 序列化、反序列化 writeObject() readObject()

    Reader / Writer 字符流的抽象父类
    InputStreamReader / OutputStreamWriter 编码转换流
    FileReader / FileWriter 内部是“文件字节流”接“编码转换流”
    BufferedReader / BufferedWriter 字符缓冲,readLine()
    PrintWriter 与 PrintStream 相同

File

  • 封装磁盘路径字符串
  • 可以封装
    *)文件路径
    *)目录路径
    *)不存在的路径

    创建对象


    1.File f = new File(“d:\abc\a.txt”);

    2.File f = new File(“d:\abc\”, “a.txt”);

    方法


    *) 文件或目录的属性

    canRead()         canWrite()         canExecute()                 是否可读可写可执行        isHidden()                  是否隐藏文件        exists()                        表示的路径是否存在        getAbsolutePath()   完整路径        getName()           文件名        getParent()         父目录        lastModified()  最后修改时间,毫秒值        length()                文件字节量,对目录无效        isDirectory()       是否文件夹        isFile()                是否文件        getTotalSpace() 空间总大小        getFreeSpace()  可用空间

    *) 文件或目录操作

            createNewFile() 创建文件        delete()                删除文件或“空目录”        mkdir()                 创建单层目录        mkdirs()                创建多层目录        renameTo()          改名、移动        *) 创建删除重命名方法返回 boolean,表示操作是否成功        File.createTempFile(前缀,  后缀)        在系统临时目录创建临时文件

    *) 文件列表

            list()          返回 String[],包含子文件、子目录名称        listFiles() 返回 File[],包含子文件、子目录的 File 对象        list(FilenameFilter)        listFiles(FilenameFilter)        listFiles(FileFilter)                                只列出符合过滤条件的文件、目录,                                参数: 外接的过滤器

RandomAccessFile

  • 读写文件的工具
  • 文件当做字节数组,
    用下标读写指定位置的字节值

    创建对象


    1. RandomAccessFile raf =
      new RandomAccessFile(文件, “r”);

      r - 只读

    2. RandomAccessFile raf =
      new RandomAccessFile(文件, “rw”);

      rw - 读写

    方法


    write(int b)
    int 四个字节中,只输出末尾一个字节值,
    [1][2][3][4] –> [4]

    write(byte[] buf)
    输出数组中全部字节值

    write(byte[] buf, int from, int length)
    输出数组中从 from 开的 length 个字节值

    read()
    读取一个字节,再补3个0字节,转成int
    [4] –> [1][2][3][4]

    读取结束,再读取,返回 -1

    read(byte[] buf)
    根据数组长度,读取一批字节值,放入数组,
    返回这一批的字节数量

    读取结束,再读取,返回 -1

    seek(int position)
    定位下标到指定的位置

    getFilePointer()
    获得当前下标位置

    writeInt(int i) 完整输出 int 的4个字节
    writeDouble(double d) 完整输出 double 的8个字节

    writeUTF(String s)
    先输出两个字节表示字符串的字节长度
    再输出字符串的字节值

    readInt() 读取4个字节值转成int
    readDouble()读取8个字节值转成double

    readUTF()
    先读取2个字节值,来确定字符串的字节长度,
    再读取这些字节值转成 String

    *)读取结束再读取,会出现 EOFException

    EOF - END OF FILE

流 Stream

  • 数据读写操作,抽象成数据在管道中流动
  • 流是单向的

    *)输入流
    *)输出流

  • 流过去的数据,不能重复流动,
    只能从头到尾顺序读写数据

InputStream / OutputStream

  • 字节流抽象父类

    方法


    OutputStream

    write(int b)
    write(byte[] buf)
    write(byte[] buf, int from, int length)
    flush() 刷出缓存数据

    InputStream

    read()
    read(byte[] buf)
    available() 获得剩余的可读取字节量

FileInputStream / FileOutputStream

  • 直接与文件相接,读写文件中的数据

    创建对象


    1. FileOutputStream in =
      new FileOutputStream(文件);

      不管文件是否存在,
      都创建新的空文件

    2. FileOutputStream in =
      new FileOutputStream(文件, true);

      不存在,新建;
      存在,追加。

高级流、操作流

  • 与其他流相接,提供特定的数据处理功能
  • 对高级流的操作,会对相接的流执行相同操作

BufferedInputStream / BufferedOutputStream

  • 提供内存缓冲区,提高单字节读写效率

    创建对象


    1.BufferedOutputStream out =
    new BufferedOutputStream(相接的流);

    内部缓存数组容量 8192

    2.BufferedOutputStream out =
    new BufferedOutputStream(相接的流, 16*1024);

    内部缓存数组容量 16k

DataInputStream / DataOutputStream

  • 读写固定字节格式的数据

    创建对象


    DataOutputStream out =
    new DataOutputStream(相接的流);

    方法


    DataOutputStream

    writeInt(int i)
    writeDouble(double d)

    writeUTF(String s)

    DataInputStream

    readInt()
    readDouble()

    readUTF()

PrintStream

  • 任何类型数据转成字符串输出

    write(97)       61writeInt(97)    00 00 00 61print(97)       39 37      "97"      '9'  '7'  

    创建对象


    1. PrintStream out = new PrintStream(相接的流);

    2. PrintStream out = new PrintStream(文件);

    3. PrintStream out = new PrintStream(文件, 字符编码);

    方法


    print()
    println()

字符编码 Encoding

字符集 Charset

asc-ii

  0 - 127

iso-8859-1
Latin-1

  160 - 255  西欧字符

GB2312 双字节
7+ 中文字符 喆,镕

GBK
20902 中文

BIG5
jpxxx
krxxx
alxxx

Unicode


*) 统一码、万国码*) 70万+*) 常用字符表,双字节*) 生僻字符表,三字节或以上*) java 的 char 类型采用 Unicode 编码*) UTF-8  Unicde传输格式    *)英文,单字节    *)某些字符,双字节    *)中文,三字节
  • java 的字符编码转换运算

    *)Unicode –> 其他编码


      String s = "abc中文";  //转成默认编码  byte[] a = s.getBytes();  //转成 UTF-8 编码  byte[] a = s.getBytes("UTF-8");

    *)其他编码 –> Unicode


      //从默认编码转换  String s = new String(byte[]数组);  //从指定的编码转换  String s = new String(byte[]数组, "UTF-8");

Reader / Writer

  • 字符流的抽象父类

    方法


    Writer

    write(int c)
    int末尾两个字节是一个 char 类型字符,
    输出末尾的两个字节值

    write(char[] buf)
    write(char[] buf, int from, int length)
    write(String s)

    Reader

    read()
    读取 char 类型字符,
    再补两个 0 字节转成 int

    read(char[] buf)

InputStreamReader / OutputStreamWriter

  • 字符编码转换流

  • OutputStreamWriter
    将 Unicode 字符转换成其他编码字节值输出

  • InputStreamReader
    将读取的其他编码字符,转成 Unicode 编码字符

    创建对象


    1. OutputStreamWriter out =
      new OutputStreamWriter(相接的字节流);

    2. OutputStreamWriter out =
      new OutputStreamWriter(相接的字节流, 字符编码);

FileReader / FileWriter

  • 它内部是“文件字节流”接“编码转换流”
  • 不能指定字符编码,只能使用默认编码

    创建对象


    FileWriter out = new FileWriter(文件);

    等价于:
    OutputStreamWriter out =
    new OutputStreamWriter(
    new FileOutputStream(文件));

BufferedReader / BufferedWriter

  • 字符缓冲流

    创建对象


    BufferedWriter out =
    new BufferedWriter(相接的字符流);

    BufferedReader 方法


    readLine()
    读取一行字符串,不包含末尾换行符

    读取结束再读取,会返回 null

PrintWriter

  • 与 PrintSream 相同
  • PrintWriter 可以接字符流,也可以接字节流
  • PrintStream 接字节流

    创建对象


    1.PrintWriter out = new PrintWriter(相接的字符流);
    2.PrintWriter out = new PrintWriter(相接的字节流);
    3.PrintWriter out = new PrintWriter(文件);
    3.PrintWriter out = new PrintWriter(文件, 编码);

ObjectInputStream / ObjectOutputStream

  • 序列化、反序列化
  • ObjectOutputStream
    将对象转成一串字节序列输出
  • ObjectInputStream
    读取序列化数据,恢复对象

  • 不序列化的成员
    *)static 属于类,不会随对象被序列化输出
    *)transient 临时,
    只在程序运行期间,在内存中存在
    不会被序列化持久保存

  • 序列化头部字节值

    *)新建 ObjectOutputStream 对象时,
    会自动输出 4 个字节头部值
    *)新建 ObjectInputStream 对象时,
    会自动读取 4 个头部字节值,
    来确认,后面的数据是对象序列化数据

  • 序列化版本号

    static final long serialVersionUID

    *)控制旧版本的数据,
    不允许恢复成新版本的类型

    创建对象


    ObjectOutputStream out =
    new ObjectOutputStream(相接的流);

    方法


    ObjectOutputStream

    writeObject(Object obj)
    序列化输出

    ObjectInputStream

    readObject()
    反序列化读取

ByteArrayInputStream / ByteArrayOutputStream

  • 与内存中 byte[] 数组相接,
    直接读写数组中的数据

    创建对象


    ByteArrayInputStream in =
    new ByteArrayInputStream(byte[]数组);

    ByteArrayOutputStream out =
    new ByteArrayOutputStream();

      内部有一个数组,输出的数据,  放在它内部数组中,  输出结束后,可以取出内部数组

    方法


    ByteArrayOutputStream

    toByteArray()
    取出内部的数组

0 0
原创粉丝点击