zoukankan      html  css  js  c++  java
  • javase 文件IO相关

    IO流

    IO流的分类

    1. 按流的方向分:输入流,输出流
    2. 读取数据的方式
      1. 按照字节读取 字节流
      2. 按照字符读取 文本流

    java中所有的文件读取相关的类都是在java.io包下,同时所有的IO流类都实现了Closeable接口,这意味着所有流在使用以后都需要关闭。

    所有的输出流实现了Flushable。输出流在输出完成之后一定要flush将管道中剩余的数据写入文件。

    字节流

    java.io.InputStream

    java.io.OutputStream

    以上两个抽象类代表字节流。所有继承自这两个接口的都是字节流。

    FileInputStream

    文件字节输入流,使用read方法读取文件。每次读取一个字节并返回。读到文件末尾了,就返回-1。缺点是一次读取一个字节,硬盘交换频繁,效率低

    或者提供一个字节数组参数,当read方法每次读取时将会把读到文件装入提供的字节数组中,当返回-1时,以读取完文件。

    available方法 获取还没有读取的字节数。可以利用这个方法一次性读取文件内容,但是该方法不适合于大文件。

    skip方法 提供一个参数,跳过指定数量的字节

    FileOutputStream

    new FileOutputStream(name, isAppend) 
    

    文件输出流,第一个参数提供需要打开的文件名,第二个参数标志是否需要以追加方式打开。

    write 当提供一个参数时写入一个字节数组。文件不存在时,自动新建,如果文件存在,根据参数判断是追加写入还是覆盖重写。

    write(arr, offf, len) 将数组的一部分写入

    字符流

    java.io.Reader

    java.io.Writer

    以上两个抽象类代表字符流,所有继承自这两个接口的流都是字符流。

    FileReader

    字符文件输入流,基本使用参数和比特文件输入流差不多。只不过数据以字符数组的形式装载。

    FileWriter

    字节转换流

    InputStreamReader

    OutputStreamWriter

    该流将字节流转换称为字符流

    包装流

    当一个流的构造方法中需要一个流的时候,作为参数的流称为节点流,外部负责包装的称为包装流,被构造的流称为包装流

    缓冲包装流

    缓冲包装流自带一个缓冲,同时还可以在构造是指定缓冲大小,但是大多数时候,缓冲大小都足够了。

    自带缓冲,也就是自带读取的那个装载数组。在使用read方法的时候,尽管你可以读取一个字节或者字符,但是对于包装流来说它还是从他的缓冲中取出的。缓冲流的默认缓冲大小为1024*8个字节/字符。

    1. BufferedReader

    2. BufferedWriter

    3. BufferedInputStream

    4. BufferedOutputStream

    原始数据写入包装流

    DataInputStream

    DataOutputStream

    例如:

    short a = 1;
    
    try (DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("Data"))) {
        dataOutputStream.writeShort(a);
        dataOutputStream.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    该流将会把提供的数据按照某人的原始数据类型写入。把数据按类型写入,查看Data文件内容为:

    image-20200616123532551

    可以看到其是完全使用原始数据的类型结构写入的。

    打印包装流

    PrintWriter

    PrintStream

    打印,用来装饰其他输出流。作用是将数据格式化输出。

    对象包装流

    ObjectInputStream

    ObjectOutputStream

    专门输出对象的序列化表示的,能够别输入输出的对象一定需要实现Serializeable接口。并且推荐手动指定序列化版本号。

    File类

    并没有IO方法,仅仅是用来表示文件路径。需要注意的是IDEA中java的根路径是项目文件的根路径。

    有以下方法

    exists 路径是否存在

    mkdir 创建一层目录

    mkdirs 创建多重目录

    parentPath 获取父路径,以文本形式返回

    getParentFile 获取父路径, 以File对象形式返回

    getName 获取文件名

    isDirectory 判断是否是一个目录

    isFile 判断是否是一个文件

    getLastModified 获取最后一次修改时间的时间戳

    length 获取文件大小

    listFiles 获取目录下所有子文件

    其他

    System.setOut方法可以 修改标准输出流为指定流

  • 相关阅读:
    ironic port bind
    pdb /usr/bin/neutron-server
    networking_generic_switch
    [CodeForces586D]Phillip and Trains
    [CodeForces598D]Igor In the Museum
    [poj3468]A Simple Problem with Integers
    [bzoj1503][NOI2004]郁闷的出纳员
    [bzoj1208][HNOI2004]宠物收养所
    [luogu3384][模板]树链剖分
    [CodeForces869A]The Artful Expedient
  • 原文地址:https://www.cnblogs.com/freesfu/p/13747358.html
Copyright © 2011-2022 走看看