• java 文件操作与IO流的常用方法


    一.文件操作

    1.构造方法
    方法名 说明
    File(String pathname) 根据一个路径得到File对象
    File(String parent, String child) 根据一个目录和一个子文件/目录得到File对象
    File(File parent, String child) 根据一个父File对象和一个子文件/目录得到File对象
    2.创建:
    方法名 说明
    createNewFile() 在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false
    mkdir() 在指定位置创建一个单级文件夹
    mkdirs() 在指定位置创建一个多级文件夹
    renameTo(File dest) 如果目标文件与源文件是在同一个路径下,那么renameTo的作用是重命名, 如果目标文件与源文件不是在同一个路径下,那么renameTo的作用就是剪切,而且还不能操作文件夹
    3.删除:
    方法名 说明
    delete() 删除文件或者一个空文件夹,不能删除非空文件夹,马上删除文件,返回一个布尔值
    deleteOnExit() jvm退出时删除文件或者文件夹,用于删除临时文件,无返回值。
    4.判断:
    方法 说明
    exists() 文件或文件夹是否存在。
    isFile() 是否是一个文件,如果不存在,则始终为false
    isDirectory() 是否是一个目录,如果不存在,则始终为false
    isHidden() 是否是一个隐藏的文件或是否是隐藏的目录
    isAbsolute() 测试此抽象路径名是否为绝对路径名
    5. 获取:
    方法 说明
    getName() 获取文件或文件夹的名称,不包含上级路径
    getAbsolutePath() 获取文件的绝对路径,与文件是否存在没关系
    ength() 获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L
    getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null
    lastModified() 获取最后一次被修改的时间
    6.文件夹相关:
    方法 说明
    static File[] listRoots() 列出所有的根目录(Window中就是所有系统的盘符)
    list() 返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null
    listFiles() 返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null
    list(FilenameFilter filter) 返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null
    listFiles(FilenameFilter filter) 返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null

    二.IO流

    image-20210205151942617

    image-20210205152044095

    1.字节流

    (1).字节流基类
    InputStream

    InputStream:字节输入流基类,抽象类是表示字节输入流的所有类的超类。

    常用方法:

    方法名 说明
    abstract int read() 从输入流中读取数据的下一个字节
    int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b中
    int read(byte[] b, int off, int len) 将输入流中最多 len 个数据字节读入 byte 数组
    long skip(long n) 跳过和丢弃此输入流中数据的 n个字节
    void close() 关闭此输入流并释放与该流关联的所有系统资源
    OutputStream

    OutputStream:字节输出流基类,抽象类是表示输出字节流的所有类的超类。

    方法名 说明
    void write(byte[] b) 将 b.length 个字节从指定的 byte 数组写入此输出流
    void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流
    abstract void write(int b) 指定的字节写入此输出流
    void close() 关闭此输出流并释放与此流有关的所有系统资源
    void flush() 刷新此输出流并强制写出所有缓冲的输出字节
    (2).字节文件操作流
    FileInputStream

    FileInputStream:字节文件输入流,从文件系统中的某个文件中获得输入字节,用于读取诸如图像数据之类的原始字节流。

    构造方法:

    方法名 说明
    FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的File对象file指定
    FileInputStream(String name) 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的路径name指定

    常用方法:覆盖和重写了父类的的常用方法。

    FileOutputStream

    FileOutputStream:字节文件输出流是用于将数据写入到File,从程序中写入到其他位置。

    构造方法:

    方法名 说明
    FileOutputStream(File file) 创建一个向指定File对象表示的文件中写入数据的文件输出流
    FileOutputStream(File file, boolean append) 创建一个向指定File对象表示的文件中写入数据的文件输出流
    FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流
    FileOutputStream(String name, boolean append) 创建一个向具有指定name的文件中写入数据的输出文件流

    常用方法:覆盖和重写了父类的的常用方法。

    (3).字节缓冲流(高效流)
    BufferedInputStream

    BufferedInputStream:字节缓冲输入流,提高了读取效率。

    构造方法:

    方法名 说明
    BufferedInputStream(InputStream in) 创建一个 BufferedInputStream并保存其参数,即输入流in,以便将来使用。
    BufferedInputStream(InputStream in, int size) 创建具有指定缓冲区大小的 BufferedInputStream并保存其参数,即输入流in以便将来使用
    BufferedOutputStream

    BufferedOutputStream:字节缓冲输出流,提高了写出效率。

    构造方法:

    方法名 说明
    BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流
    BufferedOutputStream(OutputStream out, int size) 创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流

    常用方法:

    方法名 说明
    void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流
    void write(int b) 将指定的字节写入此缓冲的输出流
    void flush() 刷新此缓冲的输出流

    2.字符流

    (1).字符流基类
    Reader

    Reader:读取字符流的抽象类

    常用方法:

    方法名 说明
    int read() 读取单个字符
    int read(char[] cbuf) 将字符读入数组
    abstract int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分
    long skip(long n) 跳过字符
    abstract void close() 关闭该流并释放与之关联的所有资源
    Writer

    Writer:写入字符流的抽象类。

    常用方法 说明
    void write(char[] cbuf) 写入字符数组
    abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分
    void write(int c) 写入单个字符
    void write(String str) 写入字符串
    void write(String str, int off, int len) 写入字符串的某一部分
    Writer append(char c) 将指定字符添加到此 writer
    Writer append(CharSequence csq) 将指定字符序列添加到此 writer
    Writer append(CharSequence csq, int start, int end) 将指定字符序列的子序列添加到此 writer.Appendable
    abstract void close() 关闭此流,但要先刷新它
    abstract void flush() 刷新该流的缓冲
    (2).字符转换流
    InputStreamReader

    InputStreamReader:字节流转字符流,它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

    构造方法:

    方法名 说明
    InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader
    InputStreamReader(InputStream in, Charset cs) 创建使用给定字符集的 InputStreamReader
    InputStreamReader(InputStream in, CharsetDecoder dec) 创建使用给定字符集解码器的 InputStreamReader
    InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader

    特有方法:

    方法名 说明
    String getEncoding() 返回此流使用的字符编码的名称
    OutputStreamWriter

    OutputStreamWriter:字节流转字符流。

    构造方法:

    方法名 说明
    OutputStreamWriter(OutputStream out) 创建使用默认字符编码的 OutputStreamWriter
    OutputStreamWriter(OutputStream out, Charset cs) 创建使用给定字符集的 OutputStreamWriter
    OutputStreamWriter(OutputStream out, CharsetEncoder enc) 创建使用给定字符集编码器的 OutputStreamWriter
    OutputStreamWriter(OutputStream out, String charsetName) 创建使用指定字符集的 OutputStreamWriter

    特有方法:

    方法名 说明
    String getEncoding() 返回此流使用的字符编码的名称
    字符缓冲流(高效流)

    BufferedReader:字符缓冲流,从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

    构造方法:

    方法名 说明
    BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流
    BufferedReader(Reader in, int sz) 创建一个使用指定大小输入缓冲区的缓冲字符输入流

    特有方法:

    方法名 说明
    void newLine() 写入一个行分隔符
    FileReader、FileWriter

    FileReader:InputStreamReader类的直接子类,用来读取字符文件的便捷类,使用默认字符编码。
    FileWriter:OutputStreamWriter类的直接子类,用来写入字符文件的便捷类,使用默认字符编码。

    3.缓冲流效率对比
    读取方式一:
    FileInputStream inputStream = new FileInputStream("D://test.mp4");
    FileOutputStream outputStream = new FileOutputStream("test.mp4");
    int len;
    // 开始时间
    long begin = System.currentTimeMillis();
    // 一次读取一个字节
    while ((len = inputStream.read()) != -1) {
        outputStream.write(len);
    }
    // 用时毫秒
    System.out.println(System.currentTimeMillis() - begin);// 213195
    //关闭流释放资源
    inputStream.close();
    outputStream.close();
    
    读取方式二:
    FileInputStream inputStream = new FileInputStream("D://test.mp4");
    FileOutputStream outputStream = new FileOutputStream("test.mp4");
    int len;
    byte[] bs = new byte[1024];
    // 开始时间
    long begin = System.currentTimeMillis();
    // 一次读取一个字节数组
    while ((len = inputStream.read(bs)) != -1) {
        outputStream.write(bs, 0, len);
    }
    // 用时毫秒
    System.out.println(System.currentTimeMillis() - begin);// 281
    
    inputStream.close();
    outputStream.close();
    
    读取方式三:
    FileInputStream inputStream = new FileInputStream("D://test.mp4");
    BufferedInputStream bis = new BufferedInputStream(inputStream);
    FileOutputStream outputStream = new FileOutputStream("test.mp4");
    BufferedOutputStream bos = new BufferedOutputStream(outputStream);
    int len;
    byte[] bs = new byte[1024];
    // 开始时间
    long begin = System.currentTimeMillis();
    while ((len = bis.read(bs)) != -1) {
        bos.write(bs, 0, len);
    }
    // 用时毫秒
    System.out.println(System.currentTimeMillis() - begin);// 78
    
    bis.close();
    bos.close();
    

    读写速度差距相当明显

  • 相关阅读:
    Java
    数据同步方案(附Java源码)
    windows下强大的wmic命令行工具
    利用dokan作虚拟磁盘开发
    用apache配置多个tomcat webapp
    apache2.2+tomcat配置[转]
    tomcat webdav
    Modbus/TCP
    AI语音验证码识别
    Win10 重命名文件夹:找不到指定文件。
  • 原文地址:https://www.cnblogs.com/SnowPrince/p/14378865.html
Copyright © 2020-2023  润新知