IO流篇(一、File)

目录

一、学习前言

二、文件简介

三、文件使用

[1. 绝对路径 vs 相对路径](#1. 绝对路径 vs 相对路径)

[2. 路径分隔符](#2. 路径分隔符)

[3. 属性(字段)](#3. 属性(字段))

[4. 构造方法](#4. 构造方法)

[5. 常用方法](#5. 常用方法)

[5.1. 获取文件的相关信息](#5.1. 获取文件的相关信息)

[5.2. 判断功能](#5.2. 判断功能)

[5.3. 新建和删除](#5.3. 新建和删除)

[5.4. 文件的获取](#5.4. 文件的获取)

[5.5. 重命名文件](#5.5. 重命名文件)

四、文件使用练习

[1. 学会创建File对象定位操作系统的文件](#1. 学会创建File对象定位操作系统的文件)

[2. File类的获取功能的API](#2. File类的获取功能的API)

[3. File类的创建和删除的方法](#3. File类的创建和删除的方法)

[4. File针对目录的遍历](#4. File针对目录的遍历)

[5. 去D盘判断搜索某个文件](#5. 去D盘判断搜索某个文件)

[6. 删除非空文件夹](#6. 删除非空文件夹)

五、封装成一个工具类


一、学习前言

之前,如果我们想要存储一些数据就是利用数组和集合容器进行存储数据,

但是这些数据都是存储于内存中,如果程序退出或断电,数据也就会随之消失,无法永久保存数据!

所以,我们要想将数据持久化,利用文件存储就是一种很好的选择,

磁盘中数据的形式就是文件,文件是数据的载体,所以,可以通过文件将数据持久化到磁盘中,永久存储数据

数据持久化

数据持久化就是指将内存中的瞬时数据保存到存储设备中,保证在电脑或手机在关闭状态,数据也不会丢失。

例如:

数据持久化到磁盘文件、XML数据文件、数据库中等

像我们以前数组或集合存储的数据其实都是瞬时数据。

什么是瞬时数据?

瞬时数据就是指那些存储在内存当中,有可能会因为程序关闭或其他原因导致内存中的数据丢失。

二、文件简介

File类是文件和目录路径名的抽象表示形式,主要用于文件和目录的创建、查找和删除等操作。

即Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件或者目录只

要创建File这个类即可。

不过要注意的是File类只是对文件的操作类,只能对文件本身进行操作,不能对文件内容进行操作。

三、文件使用

1. 绝对路径 vs 相对路径

  1. 绝对路径:是一个固定的路径,从盘符开始
  2. 相对路径:是相对于某个位置开始
    • main()方法中的相对路径是相对于当前工程
    • 单元测试方法中的相对路径是相对于当前模块

2. 路径分隔符

  1. 路径中的每级目录之间用一个路径分隔符隔开
  2. 路径分隔符和系统有关
    • windows 和 DOS 系统默认使用""来表示
    • UNIX和URL使用"/"来表示
  1. Java程序支持跨平台运行,因此路径分隔符要慎用。为了解决这个隐患,File类提供了一个常量: public static final String separator:根据操作系统,动态的提供分隔符。

         File file1 = new File("F:\\wclass\\06Network\\resource\\txt\\info.txt");
         File file2 = new File("F:" + File.separator + "wclass" + File.separator + "06Network" + File.separator + "resource" + File.separator + "txt" + File.separator + "info.txt");
         File file3 = new File("F:\\wclass\\06Network\\resource\\txt");
    

代码封装到FileUtil工具类的PathSeparator方法:

    public static void PathSeparator() {
        System.out.println("------------------------------------PathSeparator------------------------------------");
        File file1 = new File("F:\\wclass\\06Network\\resource\\txt\\info.txt");
        File file2 = new File("F:" + File.separator + "wclass" + File.separator + "06Network" + File.separator + "resource" + File.separator + "txt" + File.separator + "info.txt");
        File file3 = new File("F:\\wclass\\06Network\\resource\\txt");
    }

3. 属性(字段)

从上图的API可以发现File中包括两种分隔符,路径分隔符和名称分隔符,而且分别还有两种形式Char型和

String型。

其中 File.pathSeparator 指的是分隔连续多个路径字符串的分隔符。

在UNIX系统上,这个字符是':' ; 在Microsoft Windows系统上是';' 。

File.separator 指的是用来分隔同一个路径字符串中的目录的分隔符。

在UNIX系统上,该字段的值为'/'; 在Microsoft Windows系统上是'\' 。

我们都知道由于不同的操作系统之间会导致分隔符的不同,所以使用它们的作用主要就是屏蔽各个平台之间的

分隔符差异。

        //在Windows系统下输出
        System.out.println(File.pathSeparator);// 输出;

        System.out.println(File.separator);// 输出 \

        //简单测试一下,调用的方法后面会讲
        File file1 = new File("F:\\wclass\\06Network\\resource\\txt\\info.txt");//这里两个\\是Java中的转义字符
        File file2 = new File("F:" + File.separator + "wclass" + File.separator + "06Network" + File.separator + "resource" + File.separator + "txt" + File.separator + "info.txt");
        System.out.println(file1.getAbsolutePath());
        System.out.println(file2.getAbsolutePath());

代码封装到FileUtil工具类的Attribute方法:

    public static void Attribute(){
        System.out.println("------------------------------------Attribute------------------------------------");
        //在Windows系统下输出
        System.out.println(File.pathSeparator);// 输出;

        System.out.println(File.separator);// 输出 \

        //简单测试一下,调用的方法后面会讲
        File file1 = new File("F:\\wclass\\06Network\\resource\\txt\\info.txt");//这里两个\\是Java中的转义字符
        File file2 = new File("F:" + File.separator + "wclass" + File.separator + "06Network" + File.separator + "resource" + File.separator + "txt" + File.separator + "info.txt");
        System.out.println(file1.getAbsolutePath());
        System.out.println(file2.getAbsolutePath());
    }

输出的结果:

4. 构造方法

上图的构造方法使用举例如下:

    public static void constructorMethod() {
        System.out.println("------------------------------------ConstructorMethod------------------------------------");
        //File(String parent, String child)
        //从父路径名字符串和子路径名字符串创建新的File实例。
        File f1 = new File("F:", "\\wclass\\06Network\\resource\\txt\\hello.txt");
        System.out.println(f1); //输出 F:\wclass\06Network\resource\txt\hello.txt

        //File(String pathname)
        //通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。
        //不用Java分隔符
        File f2 = new File("F:\\wclass\\06Network\\resource\\txt\\hello.txt");
        //使用Java分隔符
        File f3 = new File("F:" + File.separator + "wclass" + File.separator + "06Network" + File.separator + "resource" + File.separator + "txt" + File.separator + "hello.txt");
        System.out.println(f2); //输出 F:\wclass\06Network\resource\txt\hello.txt
        System.out.println(f3); //输出 F:\wclass\06Network\resource\txt\hello.txt

        //File(File parent, String child)
        //从父抽象路径名和子路径名字符串创建新的 File实例。
        File f4 = new File("F:");
        File f5 = new File(f4, "\\wclass\\06Network\\resource\\txt\\hello.txt");
        System.out.println(f5); //输出 D:\IO\hello.txt
    }

注意:

  1. 一个File对象代表硬盘中实际存在的一个文件或者目录。
  2. 无论该路径下是否存在文件或者目录,都不影响File对象的创建。

输出结果:

5. 常用方法

5.1. 获取文件的相关信息

  • String getAbsolutePath() :获取绝对路径名字符串。
  • String getName():获取文件或目录的名称。
  • String getPath():获取路径名字符串。
  • String getParent() :获取路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
  • Long lastModified():获取最后一次修改的时间(返回毫秒)。
  • Long length():获取文件的长度,如果表示目录则返回值未指定。

以上方法测试的代码如下【测试以自己的电脑文件夹为准】:

    /**
     * 获取文件的相关信息
     */
    public static void getFileInformation() {

        System.out.println("------------------------------------CommonMethod01:Obtain relevant information about the file------------------------------------");
        System.out.println("------------------------------------常用方法:获取文件的相关信息------------------------------------");
        //路径带文件
        File f1 = new File("F:\\wclass\\06Network\\resource\\txt\\hello.txt");
        System.out.println("文件绝对路径:" + f1.getAbsolutePath());
        System.out.println("文件名称:" + f1.getName());
        System.out.println("文件路径(字符串):" + f1.getPath());
        System.out.println("文件父路径:" + f1.getParent());
        System.out.println("文件最后修改时间(ms):" + f1.lastModified());
        System.out.println("文件长度:" + f1.length());
        System.out.println("------------");
        //路径不带文件,纯目录
        File f2 = new File("F:\\wclass\\06Network\\resource\\txt\\");
        System.out.println("目录绝对路径:" + f2.getAbsolutePath());
        System.out.println("目录名称:" + f2.getName());
        System.out.println("目录路径(字符串):" + f2.getPath());
        System.out.println("目录父路径:" + f2.getParent());
        System.out.println("目录最后修改时间(ms):" + f2.lastModified());
        System.out.println("目录长度:" + f2.length());
    }

运行结果:

注意:绝对路径和相对路径的区别

  • 绝对路径:是一个完整的路径,以盘符开头,例如 F:\wclass\06Network\resource\txt\hello.txt。
  • 相对路径:是相较于当前路径,不以盘符开头,例如 \hello.txt。

5.2. 判断功能

  • Boolean isDirectory():判断此路径是否为一个目录
  • Boolean isFile():判断是否为一个文件
  • Boolean exists():判断文件或目录是否存在
  • Boolean canExecute():判断文件是否可执行
  • Boolean canRead():判断文件是否可读
  • Boolean canWrite():判断文件是否可写
  • Boolean isHidden():判断是否为隐藏文件

以上方法测试的代码如下:

    /**
     * 判断功能
     */
    public static void judgingFunction() {
        System.out.println("------------------------------------CommonMethod02:judging function------------------------------------");
        System.out.println("------------------------------------常用方法:判断功能------------------------------------");
        File f1 = new File("F:\\wclass\\06Network\\resource\\txt\\hello.txt");
        //路径带文件
        System.out.println("是否为目录:"+f1.isDirectory());
        System.out.println("是否为文件"+f1.isFile());
        System.out.println("是否存在"+f1.exists());
        System.out.println("是否可执行"+f1.canExecute());
        System.out.println("是否可读"+f1.canRead());
        System.out.println("是否可写"+f1.canWrite());
        System.out.println("是否隐藏"+f1.isHidden());
        System.out.println("------------");
        File f2 = new File("F:\\wclass\\06Network\\resource\\txt");
        //路径不带文件,纯目录
        System.out.println("是否为目录:"+f2.isDirectory());
        System.out.println("是否为文件"+f2.isFile());
        System.out.println("是否存在"+f2.exists());
        System.out.println("是否可执行"+f2.canExecute());
        System.out.println("是否可读"+f2.canRead());
        System.out.println("是否可写"+f2.canWrite());
        System.out.println("是否隐藏"+f2.isHidden());
    }

运行结果:

5.3. 新建和删除

  • Boolean createNewFile():创建文件,如果文件存在则不创建,返回false,反之返回true。
  • Boolean mkdir():创建文件目录。如果此文件目录存在则不创建,如果此文件目录的上层目录不存在也不创建。
  • Boolean mkdirs(): 创建文件目录。如果上层文件目录不存在也会创建。
  • Boolean delete():删除的文件或目录。如果目录下有文件或目录则不会删除。

以上方法测试的代码如下:

    /**
     * 新建和删除
     * @throws IOException
     */
    public static void newAndDelete() throws IOException {
        System.out.println("------------------------------------CommonMethod03:New and Delete------------------------------------");
        System.out.println("------------------------------------常用方法:新建和删除------------------------------------");

        //创建文件
        File f1 = new File("F:\\wclass\\06Network\\resource\\txt\\hi.txt");
        if (!f1.exists()) {
            f1.createNewFile();
            System.out.println("创建成功...");
        }else{
            System.out.println("创建失败...");
        }

        //mkdir创建文件目录,目标目录不存在,上层目录存在
        File f2 = new File("F:\\wclass\\06Network\\resource\\txt\\IO01");
        boolean mkdir = f2.mkdir();
        if (mkdir){
            System.out.println("创建目录成功...");
        }else{
            System.out.println("创建目录失败...");
        }

        //mkdirs创建文件目录,上层目录不存在存在
        File f3 = new File("F:\\wclass\\06Network\\resource\\txt\\txt01");
        boolean mkdirs = f3.mkdirs();
        if (mkdirs){
            System.out.println("创建目录成功...");
        }else{
            System.out.println("创建目录失败...");
        }

        //删除文件或目录
        /*
        boolean delete = f1.delete();
        System.out.println(delete);
        boolean delete1 = f2.delete();
        System.out.println(delete1);
        boolean delete2 = f3.delete();
        System.out.println(delete2);
        */
    }

运行结果:

5.4. 文件的获取

  • String[] list():返回一个字符串数组,获取指定目录下的所有文件或者目录名称的数组。
  • File[] listFiles():返回一个抽象路径名数组,获取指定目录下的所有文件或者目录的File数组。

以上方法测试的代码如下:为了方便测试我在IO目录下添加了其他目录。

    /**
     * 文件的获取
     * @throws IOException
     */
    public static void filesAcquisition() throws IOException {
        System.out.println("------------------------------------CommonMethod04:Acquisition of files------------------------------------");
        System.out.println("------------------------------------常用方法:文件的获取------------------------------------");

        File file = new File("F:\\wclass\\06Network\\resource\\txt\\");

        //list()方法
        String[] list = file.list();
        for (String s : list) {
            System.out.println(s);
        }
        System.out.println("----------");
        //listFiles()方法
        File[] files = file.listFiles();
        for (File f : files) {
            System.out.println(f.toString());
        }
    }

运行结果:

5.5. 重命名文件

  • Boolean renameTo(File dest):把文件重命名到指定路径。

注意:要使用这个方法其原文件(即TXT文件或其它文件)一定要存在,而且指定路径不能存在与重命名名字

相同的文件,否则永远返回false。

    /**
     * 重命名文件
     * @throws IOException
     */
    public static void renameFile() throws IOException {
        System.out.println("------------------------------------CommonMethod05:rename file------------------------------------");
        System.out.println("------------------------------------常用方法:重命名文件------------------------------------");

        File file1 = new File("F:\\wclass\\06Network\\resource\\txt\\inf.txt");
        File file2 = new File("F:\\wclass\\06Network\\resource\\txt\\hello.txt");
        boolean renameTo = file1.renameTo(file2);
        System.out.println(renameTo);
    }

运行结果:

四、文件使用练习

1. 学会创建File对象定位操作系统的文件

    public static void positionFile() throws IOException {
        System.out.println("------------------------------------FileUseExercise01------------------------------------");
        System.out.println("------------------------------------文件使用练习:学会创建File对象定位操作系统的文件------------------------------------");

        // 1、创建File对象(指定了文件的路径)
        // 路径写法: F:\resources\wclass.jpeg
        //          F:/resources/wclass.jpeg
        //          File.separator
        // File f = new File("F:\\resources\\xueshan.jpeg");
        // File f = new File("F:/resources/xueshan.jpeg");
        File f = new File("D:" + File.separator+"resources"+ File.separator +"wclass.jpeg");
        long size = f.length(); // 是文件的字节大小
        System.out.println(size);

        // 2、File创建对象,支持绝对路径 支持相对路径(重点)
        File f1 = new File("D:\\resources\\beauty.jpeg"); // 绝对路径
        System.out.println(f1.length());

        // 相对路径:一般定位模块中的文件的。 相对到工程下!!
        File f2 = new File("src/data.txt");
        System.out.println(f2.length());

        // 3、File创建对象 ,可以是文件也可以是文件夹
        File f3 = new File("D:\\resources");
        System.out.println(f3.exists()); // 判断这个路径是否存在,这个文件夹存在否
    }

2. File类的获取功能的API

|---------------------------------|---------------------|
| 方法 | 描述 |
| public String getAbsolutePath() | 返回此File的绝对路径名字符串 |
| public String getPath() | 获取创建文件对象的时候用的路径 |
| public String getName() | 返回由此File表示的文件或目录的名称 |
| public long length() | 返回由此File表示的文件的长度 |

    public static void getFunctionsAPI() throws IOException {
        System.out.println("------------------------------------FileUseExercise02------------------------------------");
        System.out.println("------------------------------------文件使用练习:File类的获取功能的API------------------------------------");

        // 1.绝对路径创建一个文件对象
        File f1 = new File("F:/wclass/06Network/resource/wclass.jpeg");
        // a.获取它的绝对路径。
        System.out.println(f1.getAbsolutePath());
        // b.获取文件定义的时候使用的路径。
        System.out.println(f1.getPath());
        // c.获取文件的名称:带后缀。
        System.out.println(f1.getName());
        // d.获取文件的大小:字节个数。
        System.out.println(f1.length()); // 字节大小
        // e.获取文件的最后修改时间
        long time = f1.lastModified();
        System.out.println("最后修改时间:" + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time));
        // f、判断文件是文件还是文件夹
        System.out.println(f1.isFile()); // true
        System.out.println(f1.isDirectory()); // false

        System.out.println("-------------------------");

        File f2 = new File("File\\src\\data.txt");
        // a.获取它的绝对路径。
        System.out.println(f2.getAbsolutePath());
        // b.获取文件定义的时候使用的路径。
        System.out.println(f2.getPath());
        // c.获取文件的名称:带后缀。
        System.out.println(f2.getName());
        // d.获取文件的大小:字节个数。
        System.out.println(f2.length()); // 字节大小
        // e.获取文件的最后修改时间
        long time1 = f2.lastModified();
        System.out.println("最后修改时间:" + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time1));
        // f、判断文件是文件还是文件夹
        System.out.println(f2.isFile()); // true
        System.out.println(f2.isDirectory()); // false
        System.out.println(f2.exists()); // true

        File file = new File("D:/");
        System.out.println(file.isFile()); // false
        System.out.println(file.isDirectory()); // true
        System.out.println(file.exists()); // true

        File file1 = new File("D:/aaa");
        System.out.println(file1.isFile()); // false
        System.out.println(file1.isDirectory()); // false
        System.out.println(file1.exists()); // false

    }

3. File类的创建和删除的方法

|---------------------------------|------------------------------------------------------|
| 方法 | 描述 |
| public boolean createNewFile(); | 当且仅当具有该名称的文件尚不存在时, 创建一个新的空文件。 (几乎不用的,因为以后文件都是自动创建的!) |
| public boolean delete(); | 删除由此File表示的文件或目录。 (只能删除空目录) |
| public boolean mkdir(); | 创建由此File表示的目录。(只能创建一级目录) |
| public boolean mkdirs(); | 可以创建多级目录(建议使用的) |

    public static void FileCreateAndDelete() throws IOException {
        System.out.println("------------------------------------FileUseExercise03------------------------------------");
        System.out.println("------------------------------------文件使用练习:File类的创建和删除的方法------------------------------------");

        File f = new File("file-io-app\\src\\data.txt");
        // a.创建新文件,创建成功返回true ,反之 ,不需要这个,以后文件写出去的时候都会自动创建
        System.out.println(f.createNewFile());
        File f1 = new File("file-io-app\\src\\data02.txt");
        System.out.println(f1.createNewFile()); // (几乎不用的,因为以后文件都是自动创建的!)

        // b.mkdir创建一级目录
        File f2 = new File("D:/resources/aaa");
        System.out.println(f2.mkdir());

        // c.mkdirs创建多级目录(重点)
        File f3 = new File("D:/resources/ccc/ddd/eee/ffff");
        // System.out.println(f3.mkdir());
        System.out.println(f3.mkdirs()); // 支持多级创建

        // d.删除文件或者空文件夹
        System.out.println(f1.delete());
        File f4 = new File("D:/resources/wclass.jpeg");
        System.out.println(f4.delete()); // 占用一样可以删除

        // 只能删除空文件夹,不能删除非空文件夹.
        File f5 = new File("D:/resources/aaa");
        System.out.println(f5.delete());
    }

4. File针对目录的遍历

|------------------------------|---------------------------------|
| 方法 | 描述 |
| public String[] list(); | 获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回 |
| public File[] listFiles(); | 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回 |

    /**
     * File针对目录的遍历
     * @throws IOException
     */
    public static void traversingDirectories() throws IOException {
        System.out.println("------------------------------------FileUseExercise04------------------------------------");
        System.out.println("------------------------------------文件使用练习:File针对目录的遍历------------------------------------");

        // 1、定位一个目录
        File f1 = new File("F:/wclass/06Network/resource");
        String[] names = f1.list();
        for (String name : names) {
            System.out.println(name);
        }

        // 2.一级文件对象
        // 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
        File[] files = f1.listFiles();
        for (File f : files) {
            System.out.println(f.getAbsolutePath());
        }

        // 注意事项
        File dir = new File("/wclass/06Network/resource/txt");
        File[] files1 = dir.listFiles();
        System.out.println(Arrays.toString(files1));
    }

5. 去D盘判断搜索某个文件

    /**
     * 去D盘判断搜索某个文件
     * @param dir
     * @param fileName
     * @throws IOException
     */
    public static void searchFile(File dir,String fileName) throws IOException {
        System.out.println("------------------------------------FileUseExercise05------------------------------------");
        System.out.println("------------------------------------文件使用练习:去D盘判断搜索某个文件------------------------------------");

        // 3、判断dir是否是目录
        if(dir != null && dir.isDirectory()){
            // 可以找了
            // 4、提取当前目录下的一级文件对象
            File[] files = dir.listFiles(); // null  []
            // 5、判断是否存在一级文件对象,存在才可以遍历
            if(files != null && files.length > 0) {
                for (File file : files) {
                    // 6、判断当前遍历的一级文件对象是文件 还是 目录
                    if(file.isFile()){
                        // 7、是不是咱们要找的,是把其路径输出即可
                        if(file.getName().contains(fileName)){
                            System.out.println("找到了:" + file.getAbsolutePath());
                            // 启动它。
                            try {
                                Runtime r = Runtime.getRuntime();
                                r.exec(file.getAbsolutePath());
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }else {
                        // 8、是文件夹,需要继续递归寻找
                        searchFile(file, fileName);
                    }
                }
            }
        }else {
            System.out.println("对不起,当前搜索的位置不是文件夹!");
        }
    }

6. 删除非空文件夹

    /**
     * 删除文件夹,无所谓里面是否有内容,都可以删除
     * @param dir
     * @throws IOException
     */
    public static void deleteDir(File dir) throws IOException {
        System.out.println("------------------------------------FileUseExercise06------------------------------------");
        System.out.println("------------------------------------文件使用练习:删除非空文件夹------------------------------------");

        // 1、判断dir存在且是文件夹
        if(dir != null && dir.exists() && dir.isDirectory()){
            // 2、提取一级文件对象。
            File[] files = dir.listFiles();
            // 3、判断是否存在一级文件对象,存在则遍历全部的一级文件对象去删除
            if(files != null && files.length > 0){
                // 里面有内容
                for (File file : files) {
                    // 4、判断file是文件还是文件夹,文件直接删除
                    if(file.isFile()){
                        file.delete();
                    }else {
                        // 递归删除
                        deleteDir(file);
                    }
                }
            }
            // 删除自己
            dir.delete();
        }
    }

五、封装成一个工具类

将以上流程封装到一个工具类 FileUti l中

package com.wclass.file;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Arrays;

/**
 * @projectName: File
 * @ClassName FilteUtil
 * @description:
 * @author: W哥
 * @create: 2024.11.04.10:38
 * @Version 1.0
 **/
public class FileUtil {


    /**
     * 路径分隔符
     */
    public static void pathSeparator() {
        System.out.println("------------------------------------PathSeparator------------------------------------");
        File file1 = new File("F:\\wclass\\06Network\\resource\\txt\\info.txt");
        File file2 = new File("F:" + File.separator + "wclass" + File.separator + "06Network" + File.separator + "resource" + File.separator + "txt" + File.separator + "info.txt");
        File file3 = new File("F:\\wclass\\06Network\\resource\\txt");
    }

    /**
     * 属性(字段)
     */
    public static void attribute() {
        System.out.println("------------------------------------Attribute------------------------------------");
        //在Windows系统下输出
        System.out.println(File.pathSeparator);// 输出;

        System.out.println(File.separator);// 输出 \

        //简单测试一下,调用的方法后面会讲
        File file1 = new File("F:\\wclass\\06Network\\resource\\txt\\info.txt");//这里两个\\是Java中的转义字符
        File file2 = new File("F:" + File.separator + "wclass" + File.separator + "06Network" + File.separator + "resource" + File.separator + "txt" + File.separator + "info.txt");
        System.out.println(file1.getAbsolutePath());
        System.out.println(file2.getAbsolutePath());
    }

    /**
     * 构造方法
     */
    public static void constructorMethod() {
        System.out.println("------------------------------------ConstructorMethod------------------------------------");
        //File(String parent, String child)
        //从父路径名字符串和子路径名字符串创建新的File实例。
        File f1 = new File("F:", "\\wclass\\06Network\\resource\\txt\\hello.txt");
        System.out.println(f1); //输出 F:\wclass\06Network\resource\txt\hello.txt

        //File(String pathname)
        //通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。
        //不用Java分隔符
        File f2 = new File("F:\\wclass\\06Network\\resource\\txt\\hello.txt");
        //使用Java分隔符
        File f3 = new File("F:" + File.separator + "wclass" + File.separator + "06Network" + File.separator + "resource" + File.separator + "txt" + File.separator + "hello.txt");
        System.out.println(f2); //输出 F:\wclass\06Network\resource\txt\hello.txt
        System.out.println(f3); //输出 F:\wclass\06Network\resource\txt\hello.txt

        //File(File parent, String child)
        //从父抽象路径名和子路径名字符串创建新的 File实例。
        File f4 = new File("F:");
        File f5 = new File(f4, "\\wclass\\06Network\\resource\\txt\\hello.txt");
        System.out.println(f5); //输出 D:\IO\hello.txt
    }


    /**
     * 获取文件的相关信息
     */
    public static void getFileInformation() {

        System.out.println("------------------------------------CommonMethod01:Obtain relevant information about the file------------------------------------");
        System.out.println("------------------------------------常用方法:获取文件的相关信息------------------------------------");
        //路径带文件
        File f1 = new File("F:\\wclass\\06Network\\resource\\txt\\hello.txt");
        System.out.println("文件绝对路径:" + f1.getAbsolutePath());
        System.out.println("文件名称:" + f1.getName());
        System.out.println("文件路径(字符串):" + f1.getPath());
        System.out.println("文件父路径:" + f1.getParent());
        System.out.println("文件最后修改时间(ms):" + f1.lastModified());
        System.out.println("文件长度:" + f1.length());
        System.out.println("------------");
        //路径不带文件,纯目录
        File f2 = new File("F:\\wclass\\06Network\\resource\\txt\\");
        System.out.println("目录绝对路径:" + f2.getAbsolutePath());
        System.out.println("目录名称:" + f2.getName());
        System.out.println("目录路径(字符串):" + f2.getPath());
        System.out.println("目录父路径:" + f2.getParent());
        System.out.println("目录最后修改时间(ms):" + f2.lastModified());
        System.out.println("目录长度:" + f2.length());
    }

    /**
     * 判断功能
     */
    public static void judgingFunction() {
        System.out.println("------------------------------------CommonMethod02:judging function------------------------------------");
        System.out.println("------------------------------------常用方法:判断功能------------------------------------");
        File f1 = new File("F:\\wclass\\06Network\\resource\\txt\\hello.txt");
        //路径带文件
        System.out.println("是否为目录:"+f1.isDirectory());
        System.out.println("是否为文件"+f1.isFile());
        System.out.println("是否存在"+f1.exists());
        System.out.println("是否可执行"+f1.canExecute());
        System.out.println("是否可读"+f1.canRead());
        System.out.println("是否可写"+f1.canWrite());
        System.out.println("是否隐藏"+f1.isHidden());
        System.out.println("------------");
        File f2 = new File("F:\\wclass\\06Network\\resource\\txt");
        //路径不带文件,纯目录
        System.out.println("是否为目录:"+f2.isDirectory());
        System.out.println("是否为文件"+f2.isFile());
        System.out.println("是否存在"+f2.exists());
        System.out.println("是否可执行"+f2.canExecute());
        System.out.println("是否可读"+f2.canRead());
        System.out.println("是否可写"+f2.canWrite());
        System.out.println("是否隐藏"+f2.isHidden());
    }

    /**
     * 新建和删除
     * @throws IOException
     */
    public static void newAndDelete() throws IOException {
        System.out.println("------------------------------------CommonMethod03:New and Delete------------------------------------");
        System.out.println("------------------------------------常用方法:新建和删除------------------------------------");

        //创建文件
        File f1 = new File("F:\\wclass\\06Network\\resource\\txt\\hi.txt");
        if (!f1.exists()) {
            f1.createNewFile();
            System.out.println("创建成功...");
        }else{
            System.out.println("创建失败...");
        }

        //mkdir创建文件目录,目标目录不存在,上层目录存在
        File f2 = new File("F:\\wclass\\06Network\\resource\\txt\\IO01");
        boolean mkdir = f2.mkdir();
        if (mkdir){
            System.out.println("创建目录成功...");
        }else{
            System.out.println("创建目录失败...");
        }

        //mkdirs创建文件目录,上层目录不存在存在
        File f3 = new File("F:\\wclass\\06Network\\resource\\txt\\txt01");
        boolean mkdirs = f3.mkdirs();
        if (mkdirs){
            System.out.println("创建目录成功...");
        }else{
            System.out.println("创建目录失败...");
        }

        //删除文件或目录
        /*
        boolean delete = f1.delete();
        System.out.println(delete);
        boolean delete1 = f2.delete();
        System.out.println(delete1);
        boolean delete2 = f3.delete();
        System.out.println(delete2);
        */
    }

    /**
     * 文件的获取
     * @throws IOException
     */
    public static void filesAcquisition() throws IOException {
        System.out.println("------------------------------------CommonMethod04:Acquisition of files------------------------------------");
        System.out.println("------------------------------------常用方法:文件的获取------------------------------------");

        File file = new File("F:\\wclass\\06Network\\resource\\txt\\");

        //list()方法
        String[] list = file.list();
        for (String s : list) {
            System.out.println(s);
        }
        System.out.println("----------");
        //listFiles()方法
        File[] files = file.listFiles();
        for (File f : files) {
            System.out.println(f.toString());
        }
    }

    /**
     * 重命名文件
     * @throws IOException
     */
    public static void renameFile() throws IOException {
        System.out.println("------------------------------------CommonMethod05:rename file------------------------------------");
        System.out.println("------------------------------------常用方法:重命名文件------------------------------------");

        File file1 = new File("F:\\wclass\\06Network\\resource\\txt\\inf.txt");
        File file2 = new File("F:\\wclass\\06Network\\resource\\txt\\hello.txt");
        boolean renameTo = file1.renameTo(file2);
        System.out.println(renameTo);
    }


    /**
     * 学会创建File对象定位操作系统的文件
     * @throws IOException
     */
    public static void positionFile() throws IOException {
        System.out.println("------------------------------------FileUseExercise01------------------------------------");
        System.out.println("------------------------------------文件使用练习:学会创建File对象定位操作系统的文件------------------------------------");

        // 1、创建File对象(指定了文件的路径)
        // 路径写法: F:\resources\wclass.jpeg
        //          F:/resources/wclass.jpeg
        //          File.separator
        // File f = new File("F:\\resources\\xueshan.jpeg");
        // File f = new File("F:/resources/xueshan.jpeg");
        File f = new File("D:" + File.separator+"resources"+ File.separator +"wclass.jpeg");
        long size = f.length(); // 是文件的字节大小
        System.out.println(size);

        // 2、File创建对象,支持绝对路径 支持相对路径(重点)
        File f1 = new File("D:\\resources\\beauty.jpeg"); // 绝对路径
        System.out.println(f1.length());

        // 相对路径:一般定位模块中的文件的。 相对到工程下!!
        File f2 = new File("src/data.txt");
        System.out.println(f2.length());

        // 3、File创建对象 ,可以是文件也可以是文件夹
        File f3 = new File("D:\\resources");
        System.out.println(f3.exists()); // 判断这个路径是否存在,这个文件夹存在否
    }

    /**
     * File类的获取功能的API
     * @throws IOException
     */
    public static void getFunctionsAPI() throws IOException {
        System.out.println("------------------------------------FileUseExercise02------------------------------------");
        System.out.println("------------------------------------文件使用练习:File类的获取功能的API------------------------------------");

        // 1.绝对路径创建一个文件对象
        File f1 = new File("F:/wclass/06Network/resource/wclass.jpeg");
        // a.获取它的绝对路径。
        System.out.println(f1.getAbsolutePath());
        // b.获取文件定义的时候使用的路径。
        System.out.println(f1.getPath());
        // c.获取文件的名称:带后缀。
        System.out.println(f1.getName());
        // d.获取文件的大小:字节个数。
        System.out.println(f1.length()); // 字节大小
        // e.获取文件的最后修改时间
        long time = f1.lastModified();
        System.out.println("最后修改时间:" + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time));
        // f、判断文件是文件还是文件夹
        System.out.println(f1.isFile()); // true
        System.out.println(f1.isDirectory()); // false

        System.out.println("-------------------------");

        File f2 = new File("File\\src\\data.txt");
        // a.获取它的绝对路径。
        System.out.println(f2.getAbsolutePath());
        // b.获取文件定义的时候使用的路径。
        System.out.println(f2.getPath());
        // c.获取文件的名称:带后缀。
        System.out.println(f2.getName());
        // d.获取文件的大小:字节个数。
        System.out.println(f2.length()); // 字节大小
        // e.获取文件的最后修改时间
        long time1 = f2.lastModified();
        System.out.println("最后修改时间:" + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time1));
        // f、判断文件是文件还是文件夹
        System.out.println(f2.isFile()); // true
        System.out.println(f2.isDirectory()); // false
        System.out.println(f2.exists()); // true

        File file = new File("D:/");
        System.out.println(file.isFile()); // false
        System.out.println(file.isDirectory()); // true
        System.out.println(file.exists()); // true

        File file1 = new File("D:/aaa");
        System.out.println(file1.isFile()); // false
        System.out.println(file1.isDirectory()); // false
        System.out.println(file1.exists()); // false

    }

    /**
     * File类的创建和删除的方法
     * @throws IOException
     */
    public static void FileCreateAndDelete() throws IOException {
        System.out.println("------------------------------------FileUseExercise03------------------------------------");
        System.out.println("------------------------------------文件使用练习:File类的创建和删除的方法------------------------------------");

        File f = new File("File\\src\\data.txt");
        // a.创建新文件,创建成功返回true ,反之 ,不需要这个,以后文件写出去的时候都会自动创建
        System.out.println(f.createNewFile());
        File f1 = new File("File\\src\\data02.txt");
        System.out.println(f1.createNewFile()); // (几乎不用的,因为以后文件都是自动创建的!)

        // b.mkdir创建一级目录
        File f2 = new File("F:/wclass/06Network/resource/aaa");
        System.out.println(f2.mkdir());

        // c.mkdirs创建多级目录(重点)
        File f3 = new File("F:/wclass/06Network/resource/ccc/ddd/eee/ffff");
        // System.out.println(f3.mkdir());
        System.out.println(f3.mkdirs()); // 支持多级创建

        // d.删除文件或者空文件夹
        System.out.println(f1.delete());
        File f4 = new File("F:/wclass/06Network/resource/wclass.jpeg");
        System.out.println(f4.delete()); // 占用一样可以删除

        // 只能删除空文件夹,不能删除非空文件夹.
        File f5 = new File("F:/wclass/06Network/resource/aaa");
        System.out.println(f5.delete());
    }


    /**
     * File针对目录的遍历
     * @throws IOException
     */
    public static void traversingDirectories() throws IOException {
        System.out.println("------------------------------------FileUseExercise04------------------------------------");
        System.out.println("------------------------------------文件使用练习:File针对目录的遍历------------------------------------");

        // 1、定位一个目录
        File f1 = new File("F:/wclass/06Network/resource");
        String[] names = f1.list();
        for (String name : names) {
            System.out.println(name);
        }

        // 2.一级文件对象
        // 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
        File[] files = f1.listFiles();
        for (File f : files) {
            System.out.println(f.getAbsolutePath());
        }

        // 注意事项
        File dir = new File("/wclass/06Network/resource/txt");
        File[] files1 = dir.listFiles();
        System.out.println(Arrays.toString(files1));
    }


    /**
     * 去D盘判断搜索某个文件
     * @param dir
     * @param fileName
     * @throws IOException
     */
    public static void searchFile(File dir,String fileName) throws IOException {
        System.out.println("------------------------------------FileUseExercise05------------------------------------");
        System.out.println("------------------------------------文件使用练习:去D盘判断搜索某个文件------------------------------------");

        // 3、判断dir是否是目录
        if(dir != null && dir.isDirectory()){
            // 可以找了
            // 4、提取当前目录下的一级文件对象
            File[] files = dir.listFiles(); // null  []
            // 5、判断是否存在一级文件对象,存在才可以遍历
            if(files != null && files.length > 0) {
                for (File file : files) {
                    // 6、判断当前遍历的一级文件对象是文件 还是 目录
                    if(file.isFile()){
                        // 7、是不是咱们要找的,是把其路径输出即可
                        if(file.getName().contains(fileName)){
                            System.out.println("找到了:" + file.getAbsolutePath());
                            // 启动它。
                            try {
                                Runtime r = Runtime.getRuntime();
                                r.exec(file.getAbsolutePath());
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }else {
                        // 8、是文件夹,需要继续递归寻找
                        searchFile(file, fileName);
                    }
                }
            }
        }else {
            System.out.println("对不起,当前搜索的位置不是文件夹!");
        }
    }


    /**
     * 删除文件夹,无所谓里面是否有内容,都可以删除
     * @param dir
     * @throws IOException
     */
    public static void deleteDir(File dir) throws IOException {
        System.out.println("------------------------------------FileUseExercise06------------------------------------");
        System.out.println("------------------------------------文件使用练习:删除非空文件夹------------------------------------");

        // 1、判断dir存在且是文件夹
        if(dir != null && dir.exists() && dir.isDirectory()){
            // 2、提取一级文件对象。
            File[] files = dir.listFiles();
            // 3、判断是否存在一级文件对象,存在则遍历全部的一级文件对象去删除
            if(files != null && files.length > 0){
                // 里面有内容
                for (File file : files) {
                    // 4、判断file是文件还是文件夹,文件直接删除
                    if(file.isFile()){
                        file.delete();
                    }else {
                        // 递归删除
                        deleteDir(file);
                    }
                }
            }
            // 删除自己
            dir.delete();
        }
    }

}
相关推荐
武昌库里写JAVA1 天前
【React】初学React
java·开发语言·算法·spring·log4j
武昌库里写JAVA2 天前
拓展学习-golang的基础语法和常用开发工具
java·开发语言·算法·spring·log4j
程序猿小D3 天前
第三百零八节 Log4j教程 - Log4j日志到数据库
java·开发语言·数据库·windows·log4j
测试界兮兮3 天前
TOP级AI驱动的单元测试工具推荐
自动化测试·软件测试·人工智能·功能测试·程序人生·单元测试·log4j
程序猿小D4 天前
第三百零七节 Log4j教程 - Log4j日志格式、Log4j日志到文件
数据库·sql·log4j·全文检索·mybatis·lucene
程序猿小D4 天前
第三百零六节 Log4j教程 - Log4j日志级别
junit·单元测试·log4j
武昌库里写JAVA4 天前
机器学习实战(一)机器学习基础
java·开发语言·算法·spring·log4j
爬山算法4 天前
Maven(22)如何使用Maven进行单元测试?
单元测试·log4j·maven
A尘埃4 天前
单元测试(Junit)
junit·单元测试·log4j