IO流篇(一、File)

news2024/11/27 4:27:38

目录

一、学习前言

二、文件简介

三、文件使用

1. 绝对路径 vs 相对路径

2. 路径分隔符

3. 属性(字段)

4. 构造方法

5. 常用方法

5.1. 获取文件的相关信息

5.2. 判断功能

5.3. 新建和删除

5.4. 文件的获取

5.5. 重命名文件

四、文件使用练习

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

2. File类的获取功能的API

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

4. File针对目录的遍历

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

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();
        }
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2236048.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【部署glm4】属性找不到、参数错误问题解决(思路:修改模型包版本)

前言:在部署glm时,遇到了一些属性找不到、参数错误的问题,通常遇到这种问题都是因为模型包版本问题导致的,要注意模型版本是否可用。 【运行官方vllm_cli_demo.py】报错 GLM-4: [rank0]: Traceback (most recent call last): [ran…

全双工通信协议WebSocket——使用WebSocket实现智能学习助手/聊天室功能

一.什么是WebSocket? WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器的全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输 HTTP 协议是一种无状态的、无连接的、单向的应用…

【Linux】冯诺依曼体系、再谈操作系统

目录 一、冯诺依曼体系结构: 1、产生: 2、介绍: 二、再谈操作系统: 1、为什么要管理软硬件资源: 2、操作系统如何进行管理: 3、库函数: 4、学习操作系统的意义: 一、冯诺依曼…

Linux的目录结构 | 命令的认识 | 相对路径 | 绝对路径 | 常用命令(一)

文章目录 1.Linux的目录结构2.命令的认识3.相对路径和绝对路径4.常用命令(目录文件操作)5.常用命令(文本查看) 1.Linux的目录结构 \ :根目录 root:root用户的工作目录 home:普通用户的工作目录 …

linux nvidia/cuda安装

1.查看显卡型号 lspci |grep -i vga2.nvidia安装 2.1在线安装 终端输入(当显卡插上之后,系统会有推荐的安装版本) ubuntu-drivers devices可得到如下内容 vendor : NVIDIA Corporation model : TU104GL [Tesla T4] driver : nvid…

简单又便宜的实现电脑远程开机唤醒方法

现有的远程开机方案 1)使用向日葵开机棒 缺点是比较贵一点,开机棒要一百多,而且查了评论发现挺多差评说不稳定,会有断联和无法唤醒的情况,而且设置也麻烦,还需要网卡支持WOL 2)使用远程开机卡 …

容器架构-Docker的成长之路

目录 1. 什么是容器 2. 容器 vs 虚拟机 3. Docker极速上手指南 环境准备 3.1 配置docker源 3.2 下载镜像加速的配置 3.3 下载自动补全工具 4. Docker C/S架构 5. Docker的镜像管理 5.1 下载nginx:alpine镜像并查看 5.2 sl大法 5.3 删除镜像 5.4 镜像清理用的命令 5…

【开源社区】ELK 磁盘异常占用解决及优化实践

1、问题及场景描述 本文主要讨论在 CentOS环境下基于 rpm 包部署 ELK 系统磁盘异常占用的问题解析和解决方案。 生产问题描述:以下问题现实场景基于ELK体系下,ES服务的磁盘占用问题解析。默认情况下,基于 RPM 安装的 Elasticsearch 服务的安…

仪表板展示|DataEase看中国:历年双十一电商销售数据分析

背景介绍 2024年“双十一”购物季正在火热进行中。自2009年首次推出至今,“双十一”已经成为中国乃至全球最大的购物狂欢节,并且延伸到了全球范围内的电子商务平台。随着人们消费水平的提升以及电子商务的普及,线上销售模式也逐渐呈现多元化…

【深度学习】论文笔记:空间变换网络(Spatial Transformer Networks)

博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: Yaoyao2024往期回顾: 【机器学习】有监督学习由浅入深讲解分类算法Fisher算法讲解每日一言🌼: 今天不想跑,所以才去跑,这才是长…

基于java+SpringBoot+Vue的旅游管理系统设计与实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven mysql5.7或8.0等等组成&#x…

【HarmonyOS】not supported when useNormalizedOHMUrl is not true.

【HarmonyOS】 not supported when useNormalizedOHMUrl is not true. 问题背景: 集成三方库编译时,IDE提示报错信息如下: hvigor ERROR: Bytecode HARs: [cashier_alipay/cashiersdk] not supported when useNormalizedOHMUrl is not true…

如何对LabVIEW软件进行性能评估?

对LabVIEW软件进行性能评估,可以从以下几个方面着手,通过定量与定性分析,全面了解软件在实际应用中的表现。这些评估方法适用于确保LabVIEW程序的运行效率、稳定性和可维护性。 一、响应时间和执行效率 时间戳测量:使用LabVIEW的时…

gitlab项目如何修改主分支main为master,以及可能遇到的问题

如果你希望将 Git 仓库的主分支名称从 main 修改为 master: 1. 本地修改分支名称 首先,切换到 main 分支: git checkout main将 main 分支重命名为 master: git branch -m main master2. 更新远程仓库 将本地更改推送到远程仓库…

(六千字心得笔记)零基础C语言入门第八课——函数(上)

文章目录 一、函数的概念1.1 函数的概念 二、库函数2.1 标准库和头文件2.2 库函数的使用方法sqrt函数(举例)功能包含的头文件实践2.2.4 库函数文档的一般格式 三、自定义函数3.1 自定义函数的语法形式3.2 函数的举例 四、形参和实参4.1 实参4.1 形参4.3 …

案例精选 | 河北省某检察院安全运营中异构日志数据融合的实践探索

河北省某检察院是当地重要的法律监督机构,肩负着维护法律尊严和社会公平正义的重要职责。该机构依法独立行使检察权,负责对犯罪行为提起公诉,并监督整个诉讼过程,同时积极参与社会治理,保护公民权益,推动法…

DBAPI连接阿里云 maxcompute 报错

使用正确的驱动包 访问以下链接寻找驱动包 https://github.com/aliyun/aliyun-odps-jdbc/releases/tag/v3.4.3 注意要使用odps-jdbc-3.4.3-jar-with-dependencies.jar ,这个是完整的jar包 不要使用odps-jdbc-3.4.3.jar,这个不是完整的,它还…

【MongoDB】MongoDB的Java API及Spring集成(Spring Data)

文章目录 Java APISpring 集成1. 添加依赖2. 配置 MongoDB3. 创建实体类4. 创建 Repository 接口5. 创建 Service 类6. 创建 Controller 类7. 启动 Spring Boot 应用8. 测试你的 API 更多相关内容可查看 Java API maven <dependency><groupId>org.mongodb</gr…

2-Ubuntu/Windows系统启动盘制作

学习目标&#xff1a; 掌握使用Win32DiskImager、Rufus等工具制作系统启动盘的基本步骤。独立将ISO镜像文件写入USB闪存驱动器&#xff0c;确保在需要时顺利安装或修复系统。通过学习如何选择正确的源文件和目标驱动器&#xff0c;理解启动盘的使用场景和注意事项&#xff0c;…

CSS的三个重点

目录 1.盒模型 (Box Model)2.位置 (position)3.布局 (Layout)4.低代码中的这些概念 在学习CSS时&#xff0c;有三个概念需要重点理解&#xff0c;分别是盒模型、定位、布局 1.盒模型 (Box Model) 定义&#xff1a; CSS 盒模型是指每个 HTML 元素在页面上被视为一个矩形盒子。…