• 初始I/O及其基本操作


    一、文件的存储结构

    文件是由OS和文件系统统一管理的
    1、文件被以树形结构(类似于二叉树,但不是二叉树)进行管理,文件都是树上的结点(node)
    2、文件可以分为两类:
    1)、存储数据的文件——普通文件(俗称文件)
    2)、管理树形结构组织的文件——目录/文件夹
    在这里插入图片描述
    3、这棵树只是逻辑结构,并不是硬盘上的物理结构(一个文件可能是磁盘上的多个部分共同组合起来的)

    二、文件的路径

    什么的是文件路径:文件的路径是指,根据一个规则,从文件树上唯一确定一个位置,这个位置一定对应到某个节点,这个结点是可以不存在的。
    在这里插入图片描述在这里插入图片描述

    1、绝对路径

    从一棵树的根节点出发描述的路径
    例如我们用绝对路径表示hello.jpg文件
    C:/Windows/Users/hello.jgp
    在这里插入图片描述

    2、相对路径

    从当前位置出发,描述目标文件的位置
    例如在hello.jpg位置描述a.txt的位置
    hello.jpg的父节点Users的父节点Windows的父节点C:目录下的a.txt;

    3、路径表示的特殊符号

    “.”:表示在当前位置
    “…”:表示回到当前位置的父节点(目录)上

    三、文件的操作

    在文件系统中,以结点为单位进行操作(代码层面)
    例如:
    文件的移动操作(文件重命名,文件剪切+粘贴): 结点的移动(重命名or 移动到其他结点下)
    文件复制操作:新建结点+内容的复制
    目录移动操作(目录的重命名、目录剪切+粘贴):以该节点位根的一棵子树的移动
    目录复制操作:以该节点位根的一棵子树的复制
    删除:默认情况下只能删除普通文件或者非空目录。只能删除结点,不能删除子树
    删除非空目录:对整棵树的删除(应该先遍历删除叶子结点,而后删除整棵树);

    四、利用Java代码实现对文件的基础操作

    1、构造方法

    在这里插入图片描述
    创建一个File对象,对这个File对象进行新建,修改,删除等操作

            //1.绝对路径的方式创建
            File file1 = new File("D:/IO/hello.txt");
            //2.传入父目录+子路径
            File file2 = new File("D:/IO", "hello.txt");
            //3.以File传入parent
            File parent = new File("D:/IO");
            File file3 = new File(parent, "hello.txt");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2、常用方法

    测试文件权限
    在这里插入图片描述
    创建新的文件
    在这里插入图片描述
    例如

    File file=new File("D:/IO/test.txt");
    file.createNewFile();//此时会在D:/IO 目录下创建一个名为test的txt文件(注意,如果目录下已经有这个文件了就会创建失败)
    
    • 1
    • 2

    删除文件
    在这里插入图片描述
    根据上个示例,我们创建了一个test.txt文件
    我们就可以调用delete()方法将他删除

    file.delete();//只能对叶子节点操作
    //注意:文件正在被别的线程使用时,删除会失败。同时当前目录下不存在这个文件时也会删除失败
    //删除非空目录也会失败
    
    • 1
    • 2
    • 3

    3、删除非空目录

    删除非空目录时,我们需要类比二叉树,需要先将他的所有叶子节点删除才能将整棵树删除,下面是利用深度优先遍历的方法删除非空目录

    删除非空目录some_dir

        public static void main(String[] args) throws IOException {
            File file=new File("D:/IO/some_dir");
            traversal(file);
        }
    
        /**
         * 深度优先遍历当前文件目录的子节点(类似于二叉树的遍历)
         * @param file
         * @throws IOException
         */
        private static void traversal(File file) throws IOException {
            File[] files=file.listFiles();
            for (File file1 : files) {
                if (file1.isDirectory()){
                    System.out.println(file1.getCanonicalPath()+"\\");
                    traversal(file1);
                    //添加删除操作
                    file1.delete();
                }else {
                    System.out.println(file1.getCanonicalPath());
                    //添加删除操作
                    file1.delete();
                }
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    Cloud Native=Cloud+Native 理解云原生
    it监控系统可以电脑吗?有什么效果
    数商云采购管理系统:采购业务模式介绍,助力汽车零部件企业采购业务高效协同
    几乎涵盖了近半年90%的Java面试题,可以肝起来了
    理解交叉熵(Cross Entropy)
    Unity 时间格式 12小时制与24小时制
    标签类目体系(面向业务的数据资产设计方法论)-读书笔记6
    c++ 函数指针
    JavaScript中的实例化研究
    在 Android 应用程序开发期间减少 Android 应用程序大小的 9 种方法
  • 原文地址:https://blog.csdn.net/qq_45681368/article/details/125516366