• Java回顾-IO流的体系结构/File文件类的使用


    一、File类的基本概念

            1、File类的一个对象代表一个文件或文件目录

            2、File类声明在java.io包下

            3、File 能新建、删除、重命名文件目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用IO流

            4、File类的对象通常作为参数传递到流的构造器中,指明读取或写入的终点。

    二、File类的常用构造器

    1、public File(String pathname)

            以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。

            -路径中的每级目录之间用一个路径分隔符隔开。

             路径分隔符和系统有关:

                     windows和DOS系统默认使用“\\”来表示

                     UNIX和URL使用“/”来表示

     2、public File(String parent,String child)

                    以parent为父路径, child为子路径创建File对象。

     3、public File(File parent,String child)

                    根据一个父File对象子文件路径创建File对象

     三、常用方法

     1、File类的获取功能

            - public String getAbsolutePath(): 获取绝对路径

            - public String getPath() : 获取路径

            - public String getName() : 获取名称

            - public String getParent(): 获取上层文件目录路径。 若无, 返回null

            - public long length() : 获取文件长度(即:字节数) 。 不能获取目录的长度。

            - public long lastModified() : 获取最后一次的修改时间, 毫秒值

    适用于文件目录(dir):

            - public String[ ] list() : 获取指定目录下的所有文件或者文件目录的名称数组

            - public File[ ] listFiles() : 获取指定目录下的所有文件或者文件目录的File数组

    2、 File类的重命名功能

            - public boolean renameTo(File dest):把文件重命名为指定的文件路径(类似剪切)

                    File1.renameTo(File2);        File1 必须存在,File2不能存在

    3、File类的判断功能

            - public boolean isDirectory(): 判断是否是文件目录

            - public boolean isFile() : 判断是否是文件

            - public boolean exists() : 判断是否存在

            - public boolean canRead() : 判断是否可读

            - public boolean canWrite() : 判断是否可写

            - public boolean isHidden() : 判断是否隐藏

    4、File类的创建功能

            - public boolean createNewFile() : 创建文件。 若文件存在, 则不创建, 返回false

            - public boolean mkdir() : 创建文件目录。 如果此文件目录存在, 就不创建了。如果此文件目录的上层目录不存在, 也不创建。

            - public boolean mkdirs() : 创建文件目录。 如果上层文件目录不存在, 一并创建

    5、File类的删除功能

            - public boolean delete(): 删除文件或者文件夹

            删除注意事项:Java中的删除不走回收站。要删除一个文件目录, 请注意该文件目录内不能包含文件或者文件目录

    四、IO流的体系结构

    1.介绍

            按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)

            按数据流流向不同分为:输入流输出流

            按流的角色的不同分为:节点流处理流

     

            节点流:直接从数据源或目的地读写数据 

            处理流:不直接连接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能

    2.基类介绍

            InputStreamReader 是所有输入流基类

            程序中打开的文件 IO 资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应该显式关闭文件 IO 资源。

            FileInputStream 从文件系统中的某个文件中获得输入字节。FileInputStream 用于读取非文本数据之类的原始字节流。要读取字符流,需要使用 FileReader

            因为字符流直接以字符作为操作单位,所以 Writer 可以用字符串来替换字符数组, 即以 String 对象作为参数

     1.InputStream(典型实现:FileInputStream

                    int read() 从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1

                    int read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。否则以整数形式返回实际读取的字节数

                    int read(byte[] b, int off,int len) 将输入流中最多 len 个数据字节读入 byte 数组。尝试读取 len 个字节,但读取的字节也可能小于该值。以整数形式返回实际读取的字节数。如果因为流位于文件末尾而没有可用的字节,则返回值 -1

                    public void close() throws IOException 关闭此输入流并释放与该流关联的所有系统资源。

    2.Reader(典型实现:FileReader

            int read() 读取单个字符。作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff)(2个 字节的Unicode码),如果已到达流的末尾,则返回 -1

            int read(char[] cbuf) 将字符读入数组。如果已到达流的末尾,则返回 -1。否则返回本次读取的字符数

            int read(char[] cbuf,int off,int len) 将字符读入数组某一部分。存到数组cbuf中,从off处开始存储,最多读len个字 符。如果已到达流的末尾,则返回 -1。否则返回本次读取的字符数

            public void close() throws IOException 关闭此输入流并释放与该流关联的所有系统资源。
            

    3.OutputStream

            void write(int b) OutputStream 将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。 即写入0~255范围的。

            void write(byte[] b) 将 b.length 个字节从指定的 byte 数组写入此输出流。write(b) 的常规协定是:应该与调用 write(b, 0, b.length) 的效果完全相同。

            void write(byte[] b,int off,int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。

            public void flush()throws IOException 刷新此输出流并强制写出所有缓冲的输出字节,调用此方法指示应将这些字节立即写入它们预期的目标。

            public void close() throws IOException 关闭此输出流并释放与该流关联的所有系统资源

    4.Writer

            void write(int c) 写入单个字符。要写入的字符包含在给定整数值的 16 个低位中,16 高位被忽略。 即 写入0 到 65535 之间的Unicode码。

            void write(char[] cbuf) 写入字符数组

            void write(char[] cbuf,int off,int len) 写入字符数组某一部分。从off开始,写入len个字符

            void write(String str) 写入字符串

            void write(String str,int off,int len) 写入字符串某一部分

            void flush() 刷新该流的缓冲,则立即将它们写入预期目标。

            public void close() throws IOException 关闭此输出流并释放与该流关联的所有系统资源。 

  • 相关阅读:
    8 - 函数
    Redis 安装部署
    C/C++教程 从入门到精通《第五章》—— 制作推箱子游戏
    完全背包问题
    扯什么kafka顺序消费,然后呢?古尔丹,代价是什么
    【Unittest】Requests实现小程序项目接口测试
    做地推共享wifi贴的如今都怎么样了?
    Zookeeper的Watch机制实现配置中心
    图的连通性基础
    强网杯2022 pwn 赛题解析——yakacmp
  • 原文地址:https://blog.csdn.net/weixin_62427168/article/details/125475043