articleList

01-File⽂件和⽬录

2025/03/14 posted in  IO
Tags: 

第1集 计算机核心基础之文件和路径核心知识点

简介:计算机核心基础之文件和路径核心知识点

  • 什么是计算机文件(File)

    • 以计算机硬盘为载体存储在计算机上的信息集合
    • 可以是文本、图片、视频、程序等,文件一般有拓展名,表示文件的类型
  • 文件目录 (Directory)

    • 就是我们一般称呼的文件夹,为了便于对文件进行存取和管理
    • 文件目录是由文件目录项组成的,分为一级目录、二级目录和多级目录。
    • 多级目录结构也称为树形结构,在多级目录结构中,每一个磁盘有一个根目录
    • 在根目录中可以包含若干子目录和文件,在子目录中不但可以包含文件,而且还可以包含下一级子目录
    • 掌握了基础后的可以去了解Linux文件系统,涉及到的东西更多,推荐看小滴课堂《Linux操作系统》课程
  • 区分两个斜杠

    • 斜杠:"/" 与 反斜杠:" \ "
    • 反斜杠(\)是一个特殊的字符,被称为转义字符,用来转义后面一个字符。
    • 转义后的字符表示一个不可见的字符或特殊含义的字符,如 \n 则表示换行,\ ? 问号,\ " 则表示双引号,\ ' 表示一个单引号等
    • 在Java中的字母前面加上反斜线""来表示常见的那些不能显示的ASCII字符,称之为转义字符
    • 例子:需要输出双引号的一段话 String title = " \"这个是带双引号的标题\" ";
    • 转义的详情参看 https://baike.baidu.com/item/%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6/86397?fr=aladdin
  • 相对路径

    • 相对某个基准目录或者文件的路径 ./ 表示当前路径; ../../ 表示上级目录
  • 绝对路径

    • 存储在硬盘上的真正路径
  • window路径分割符

    • \ 表示windows系统文件目录分割符
    image-20240518181751298
    • 如果是Java代码在window下写某个文件的话需要 下面的方式

      D:\\soft\\xdclass.txt
      因为单斜杠是用来转义的
      
    • 注意:开发和运行程序的路径不要有中文或者特殊字符,不然容易出现兼容性问题

  • Linux和Mac路径分割符(开发人员推荐使用)

    • / 表示 Linux或者Mac的路径分隔符

    • 如果是Java代码在Linux或者Mac下写某个文件的话需要 下面的方式

      /usr/soft/xdcalss.txt
      
  • 常见的文件

    • 文本 txt
    • 图片 jpg、png、jpeg
    • excel、csv等
    • tar.gzip 、zip

第2集 java核心知识之File类和API讲解

简介:介绍File类和相关API讲解

  • 简单了解IO,即Input/Output

    • 把内存的中数据存储到持久化设备到上的动作称为输出,Output 操作
    • 把持久化设备的数据读取到内存中的动作称为输入,Input操作
    • 一般把输入和输出的动作称为IO操作,IO也分网络IO,文件IO
  • 什么是File类

    • Java中的File类用于文件和目录路径名的抽象表示形式。
    • 程序代码和文件目录的关系:主要就是对文件和目录进行增删改查,俗称CRUD
    • File类的包名是java.io,实现了Serializable, Comparable两大接口以便于其对象可序列化和比较
    • 技巧:File.separator 目录分隔符,在不同的系统下不一样, windows和 mac /Linux
    • File类能新建、删除、重命名文件和目录,但File类不能用于读取或写入文件内容。
      • 如果需要读取文件内容,请使用FileReaderBufferedReader等类;
      • 如果需要写入文件内容,请使用FileWriterBufferedWriterPrintWriter等类。
  • File类的常用构造方法

    • File(String pathname):通过给定的路径名字符串(可以是相对路径或绝对路径)构造File对象。

    • File(String parent, String child):从父路径名字符串和子路径名字符串构造File对象。

  • File类的常用方法

    • 获取文件/目录信息

      • getName():返回由路径名表示的文件或目录的名称。

      • getPath():将此路径名转换为一个路径名字符串。

      • getAbsolutePath():返回路径名的绝对路径名字符串。

      • isDirectory():测试路径名表示的文件是否是一个目录。

      • isFile():测试路径名表示的文件是否是一个普通文件。

      • exists():测试路径名表示的文件或目录是否存在。

      • length():返回路径名表示的文件的长度(以字节为单位)。

    • 创建文件/目录

      • createNewFile():当且仅当具有指定名称的文件尚不存在时,创建一个新的空文件。

      • mkdir():创建路径名指定的目录。

      • mkdirs():创建路径名指定的目录,包括所有必需但不存在的父目录。

    • 删除文件/目录

      • delete():删除路径名表示的文件或目录。
    • 列出目录内容

      • list():返回一个字符串数组,这些字符串表示此抽象路径名表示的目录中的文件和目录。

      • listFiles():返回一个File数组,这些文件和目录路径名表示此抽象路径名表示的目录中的文件和目录。

  • 代码案例

    public class FileApiDemo {
        public static void main(String[] args) {
        		//Mac或者Linux
            String dir = "/Users/xdclass/Desktop/coding/xdclass-account/src/chapter10";
            //windowds系统的路径
            //String dir = "C:\\Desktop\\coding\\xdclass-account\\src\\chapter10";
    
            String name = "xdclass.txt";
            //File file = new File(dir, name);
            File file = new File(dir);
    
    
            //文件的 查询和判断
            System.out.println(File.separator);
            System.out.println("基本路径 getPath()= " + file.getPath());
            System.out.println("文件名 getName()= " + file.getName());
            System.out.println("绝对路径 getAbsolutePath = " + file.getAbsolutePath());
            System.out.println("父路径名 getParent() = " + file.getParent());
            System.out.println("是否是绝对路径 isAbsolute() = " + file.isAbsolute());
            System.out.println("是否是一个目录 isDirectory() = " + file.isDirectory());
            System.out.println("是否是一个文件 isFile() = " + file.isFile());
            System.out.println("文件或目录是否存在 exists() = " + file.exists());
    
    
            System.out.println("目录中的文件和目录的名称所组成字符串数组 list() ");
            String[] arr = file.list();
            for (String temp : arr) {
                System.out.println(temp);
            }
    
    
            //创建指定的目录
            File mkdirFile = new File(dir + "/testdir");
            mkdirFile.mkdir();
    
    
            //创建多个层级的目录
            File mkdirsFile = new File(dir + "/testdirs/test/dd");
            mkdirsFile.mkdirs();
    
    
           //创建一个新的文件
            File newFile = new File(dir + "/testdir/newfile1.txt");
            try {
                newFile.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
            //删除文件
            newFile.delete();
        }
    }
    
  • 注意

    • File的构造函数只是创建一个File实例,即使目录错误也不出报错,实例仅仅是一个路径名的抽象表示形式。
    • File类的方法大多数都涉及到磁盘I/O操作,可能会抛出IOException或其子类。
    • 在调用这些方法时,使用try-catch语句块来处理这些异常。
    • 在使用File类时,应该避免硬编码文件路径,最好使用相对路径或配置文件来指定文件路径,以提高程序的灵活性和可移植性

第3集 课程作业-文件夹和文件操作作业布置和练习

简介:课程作业-文件夹和文件批量作业布置和练习

  • 作业需求

    • 封装一个方法,传入一个路径,则在此路径下创建test文件夹
    • 然后在 test目录下创建10个文件夹,名称是1~10
    • 然后再各个文件夹里面创建一个txt文本文件, 名称也是1~10命名,重复调用此方法的话结果一样。
    • 效果
    test/
          1/
            1.txt
          2/
            2.txt
          3/
          ...
    
  • 答案代码

    public static void main(String[] args) throws IOException {
    
            //String path ="C:\\Users\\79466\\Desktop;
            String path ="/Users/xdclass/Desktop";
    
            createDir(path);
        }
    
        public static void createDir(String path) throws IOException {
    
    		String root = path + File.separator + "test";
            File rootDir = new File(root);
            if (!rootDir.exists()) {
                rootDir.mkdirs();
            }
    
            for (int i = 0; i < 10; i++) {
    
                String dirPath = root + File.separator + (i + 1);
                File dirFile = new File(dirPath);
                if (!dirFile.exists()) {
                    dirFile.mkdir();
                    String txtPath = dirPath + File.separator + (i + 1) + ".txt";
                    File txtFile = new File(txtPath);
                    if (!txtFile.exists()) {
                        txtFile.createNewFile();
                    }
                }
            }
    
        }