美文网首页
Java-IO流

Java-IO流

作者: 阿豪puls | 来源:发表于2019-10-29 17:46 被阅读0次

    File类

    • File类是操作文件和文件目录的类,能新建、删除、重命名、文件和目录
    • 但File类不能访问文件本身的内容,如果需要访问文件内容,则需要使用输入/输出流
    • File对象可以作为参数,传递给流的构造器,是操作流的基础

    File类常用方法

    public String getAbsolutePath():获取绝对路径
    public String getPath() :获取路径
    public String getName() :获取名称
    public String getParent():获取上层文件目录路径。若无,返回null
    public long length() :获取文件长度(即:字节数)。不能获取目录的长度。
    public long lastModified() :获取最后一次的修改时间,毫秒值
    public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组
    public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组
    public boolean createNewFile() :创建文件。若文件存在,则不创建,返回false
    public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。
    public boolean mkdirs() :创建文件目录。如果此文件目录存在,就不创建了。如果上层文件目录不存在,一并创建
    public boolean delete(): 删除磁盘中的文件或文件目录,删除注意事项:Java中的删除不走回收站。

    IO 原理

    • I/O是Input/Output的缩写,用于处理设备之间的数据传输,如读/写文件,网络通讯等
    • 在Java程序中,对于数据的输入/输出操作,以"流"的方式进行的
    • 输入input:读取外部数据(磁盘、光盘等存储设备)到程序内存中
    • 输出output:将程序内存的数据,输出到存储设备

    流的分类

    • 按操作数据单位分类:字节流(8 bit)、字符流(16 bit),一个汉字2个字节
    • 按数据流的流向分类:输入流、输出流
    • 按流的角色的不同分类:节点流、处理流(以Buffered开头的类)
    • 对于文本文件(.txt,.java,.c,.cpp),使用字符流处理
    • 对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt,...),使用字节流处理,如果用此处理文本,有可能会出现乱码
    流的基类

    IO 体系

    IO体系图

    常用流各自的应用场景

    字符流(操作字符串)

    字符输入流

    1、FileReader 字符输入流:用于文本文件读取操作,例:(.txt,.java,.c,.cpp)等文本文件
    2、BufferedReader 缓冲区字符输入流:用于提升使用 FileReader 在文件读取方面的效率,针对大文本文件的读取
    3、InputStreamReader :将一个字节的输入流转换为字符的输入流,可以设置指定字符流的编码格式

    字符输出流

    1、FileWrite 字符输出流:用于文本文件写入操作,例:(.txt,.java,.c,.cpp)等文本文件
    2、BufferedWriter 缓冲区字符输出流:用于提升使用 FileWrite 在文件写入方面的效率,针对大文本文件的写入
    3、OutputStreamWriter :将一个字符的输出流转换为字节的输出流,可以设置指定字符流的编码格式

    字节流(操作非文本)

    字节输入流

    1、FileInputStream 字节输入流:用于非文本文件读取,例:(.jpg,.mp3,.mp4,.avi,.doc,.ppt)等
    2、BufferedInputStream 缓冲区字节输入流:用于提升使用 FileInputStream 在文件读取方面的效率

    字节输出流

    1、FileOutputStream 字节输出流:用于非文本文件写入操作,例:(.jpg,.mp3,.mp4,.avi,.doc,.ppt)等
    2、BufferedOutputStream 缓冲区字节输出流:用于提升使用 FileoutputStream 在文件写入方面的效率

    对象流

    对象的序列化

    • ObjectOutputStream 序列化(写入操作):把内存中的Java对象,转换成平台无关的二进制流,从而方便保存到磁盘和网络传输
    • ObjectInputStream 反序列化(读取操作):把硬盘/网络中的二进制流还原成Java对象,方便程序调用

    自定义类要想序列化、反序列化,需满足以下要求
    1、需要实现接口:Serializable
    2、当前类提供一个全局常量:serialVersionUID
    3、除了当前Person类需要实现Serializable接口之外,还必须保证其内部所有属性
    也必须是可序列化的。(默认情况下,基本数据类型可序列化)

    RandomAccessFile 随机读取写入操作类(应用于:多线程继点下载)

    • 1.RandomAccessFile直接继承于java.lang.Object类,实现了DataInput和DataOutput接口
    • 2.RandomAccessFile既可以作为一个输入流,又可以作为一个输出流
    • 3.如果RandomAccessFile作为输出流时,写出到的文件如果不存在,则在执行过程中自动创建,如果写出到的文件存在,则会对原有文件内容进行覆盖。(默认情况下,从头覆盖)
      1. 可以通过相关的操作,实现RandomAccessFile“插入”数据的效果

    相关文章

      网友评论

          本文标题:Java-IO流

          本文链接:https://www.haomeiwen.com/subject/imovvctx.html