JavaSE文件操作工具类FileUtil详解

JavaSE文件操作工具类FileUtil详解

简介

JavaSE中提供了File类用来操作文件或目录。但是,操作文件或目录的流程较为繁琐,如果我们需要经常操作文件或目录,就需要编写大量的重复代码。为了解决这个问题,我们可以将文件操作的常用方法封装在一个工具类中,从而减少代码量和提高开发效率。本文将介绍一个JavaSE文件操作的工具类FileUtil。

FileUtil的设计思路

在设计FileUtil时,我们需要考虑以下因素:
1. 具有创建文件、删除文件、文件重命名和复制文件等基本文件操作的方法
2. 对于目录的操作,应当包含创建目录、删除目录及其目录下的文件和获取目录下的所有文件等方法
3. 方法的输入应当是可变参数列表,方便用户传入任意多个文件或目录路径

在这些因素的基础上,我们可以设计出FileUtil,并附上代码和注释。

FileUtil代码及注释

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 文件操作工具类FileUtil
 */
public class FileUtil {

    /**
     * 创建目录
     * 
     * @param dirs 需要创建的目录路径
     * @return 创建成功返回true,否则返回false
     */
    public static boolean createDirs(String... dirs) {
        for (String dir : dirs) {
            File file = new File(dir);
            if (!file.exists()) {
                if (!file.mkdirs()) {
                    return false;
                }
            }
        }
        return true;
    }

    /**
     * 创建文件
     * 
     * @param file  需要创建的文件
     * @return 创建成功返回true,否则返回false
     */
    public static boolean createFile(File file) {
        if (!file.exists()) {
            try {
                if (!file.createNewFile()) {
                    return false;
                }
            } catch (IOException e) {
                return false;
            }
        }
        return true;
    }

    /**
     * 删除文件
     * 
     * @param files 需要删除的文件
     * @return 删除成功返回true,否则返回false
     */
    public static boolean deleteFiles(File... files) {
        for (File file : files) {
            if (!file.exists()) {
                return false;
            }
            if (file.isDirectory()) {
                deleteFiles(file.listFiles());
            }
            if (!file.delete()) {
                return false;
            }
        }
        return true;
    }

    /**
     * 获取目录下所有文件
     * 
     * @param dir 目录路径
     * @return 目录下的所有文件
     */
    public static File[] listFiles(String dir) {
        File file = new File(dir);
        if (!file.isDirectory()) {
            return null;
        }
        return file.listFiles();
    }

    /**
     * 文件复制
     * 
     * @param src  源文件
     * @param dest 目标文件
     * @return 复制成功返回true,否则返回false
     */
    public static boolean copyFile(String src, String dest) {
        try (FileInputStream in = new FileInputStream(src);
             FileOutputStream out = new FileOutputStream(dest)) {
            byte[] buffer = new byte[1024];
            int len = -1;
            while ((len = in.read(buffer)) != -1) {
                out.write(buffer, 0, len);
            }
        } catch (FileNotFoundException e) {
            return false;
        } catch (IOException e) {
            return false;
        }
        return true;
    }

    /**
     * 文件重命名
     * 
     * @param oldFile 原文件
     * @param newFile 新文件
     * @return 重命名成功返回true,否则返回false
     */
    public static boolean renameFile(File oldFile, File newFile) {
        if (!oldFile.exists() || newFile.exists()) {
            return false;
        }
        if (!oldFile.renameTo(newFile)) {
            return false;
        } else {
            return true;
        }
    }

    public static void main(String[] args) {
        // 创建目录示例
        String dirs1 = "D:/testDir1";
        String dirs2 = "D:/testDir2";
        boolean res1 = createDirs(dirs1, dirs2);
        System.out.println("创建目录:" + res1);

        // 创建文件示例
        File file = new File("D:/testDir1/test.txt");
        boolean res2 = createFile(file);
        System.out.println("创建文件:" + res2);

        // 复制文件示例
        String src = "D:/testDir1/test.txt";
        String dest = "D:/testDir2/test.txt";
        boolean res3 = copyFile(src, dest);
        System.out.println("复制文件:" + res3);

        // 改名示例
        File oldFile = new File("D:/testDir1/test.txt");
        File newFile = new File("D:/testDir1/newTest.txt");
        boolean res4 = renameFile(oldFile, newFile);
        System.out.println("重命名文件:" + res4);

        // 删除目录及其所有文件示例
        boolean res5 = deleteFiles(new File("D:/testDir1"), new File("D:/testDir2"));
        System.out.println("删除目录:" + res5);
    }
}

示例说明

  1. 创建目录示例
String dirs1 = "D:/testDir1";
String dirs2 = "D:/testDir2";
boolean res1 = createDirs(dirs1, dirs2);
System.out.println("创建目录:" + res1);

这个示例展示了如何创建一个或多个目录。我们只需要传入一个或多个目录路径的可变参数即可,后面会输出创建目录的结果。

  1. 删除目录及其所有文件示例
boolean res5 = deleteFiles(new File("D:/testDir1"), new File("D:/testDir2"));
System.out.println("删除目录:" + res5);

这个示例展示了如何删除一个或多个目录。我们只需要传入一个或多个目录路径描述的File对象的可变参数即可,后面会输出删除目录的结果。

总结

通过对FileUtil的代码分析及示例说明,可以看出它确实方便了JavaSE文件操作的开发。我们可以使用它来快速定制我们需要的文件操作,节省了很多代码量。因此,对于经常进行JavaSE文件操作的开发者,使用FileUtil是非常值得的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaSE文件操作工具类FileUtil详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • SpringBoot Application注解原理及代码详解

    SpringBootApplication注解原理及代码详解 1. Spring Boot介绍 ​ Spring Boot是一个应用于快速创建基于Spring框架的应用程序的工具。它大大简化了Spring应用程序的搭建和开发流程, 十分适合用于微服务开发等快速迭代的场景。 2. SpringBootApplication注解 ​ SpringBootAppl…

    Java 2023年5月15日
    00
  • SpringBoot整合Spring Security过滤器链加载执行流程源码分析(最新推荐)

    下面我来详细讲解一下 SpringBoot 整合 Spring Security 过滤器链加载执行流程源码分析的完整攻略。 1. 概述 Spring Security 是基于 Spring 框架实现的安全框架。它的作用是保护系统的安全性,可以对用户进行身份认证和权限控制。Spring Security 是一个强大而灵活的安全框架,它提供了多种安全特性,包括用…

    Java 2023年6月3日
    00
  • java简单实现自定义日历

    下面是详细讲解“Java简单实现自定义日历”的完整攻略。 1. 确定需求和基本思路 首先,我们需要明确需求和基本思路。 需求:实现一个自定义的日历,可以输出指定年份和月份的所有日期以及星期。 基本思路:通过 Java 的时间日期 API,根据输入的年份和月份计算出该月份的天数和第一天是星期几,然后将日期和星期打印出来。 2. 编写代码实现 接下来,我们开始编…

    Java 2023年5月20日
    00
  • Java中线程组ThreadGroup与线程池的区别及示例

    Java中线程池与线程组ThreadGroup的区别及示例 线程池 线程池是一种线程的管理机制,它可以重用已经创建的线程,避免重复创建、销毁线程的开销,提高系统的效率。Java中通过java.util.concurrent.Executor提供了线程池的支持,并且线程池中的线程是由线程池自行管理的,开发者无需感知线程的创建、销毁等底层结构。 线程池的使用流程…

    Java 2023年5月30日
    00
  • mybatis plus实体类中字段映射mysql中的json格式方式

    下面是关于如何使用MybatisPlus实体类中字段映射MySQL中JSON格式的完整攻略。 1. 引入依赖 在pom.xml中加入以下依赖: <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter&l…

    Java 2023年5月26日
    00
  • Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办

    为了解决”Mybatis使用MySQL模糊查询时输入中文检索不到结果”的问题,我们需要在Mybatis配置文件中进行一些特定的设置。 1.在Mybatis的配置文件中添加如下代码: <configuration> <settings> <setting name="jdbcTypeForNull" value…

    Java 2023年6月1日
    00
  • JAVA代码书写规范汇总详解

    JAVA代码书写规范汇总详解 在 JAVA 开发中,书写规范的重要性不言而喻。规范的代码具有更好的可读性,易于维护和扩展,同时也有助于代码的重构和优化。本文将详细讲解 JAVA 代码书写规范汇总,希望能够帮助开发人员写出更好的代码。 命名规范 在 JAVA 中,命名规范是非常重要的。命名规范不仅决定了代码的可读性,也影响着代码的使用和维护。以下是一些常见的 …

    Java 2023年5月23日
    00
  • js中用cssText设置css样式的简单方法

    在JavaScript中使用style属性对元素进行样式设置是很常见的做法,但如果要添加多个属性或多条规则,就需要在每个语句中分别设置属性名称和属性值,这样代码就会十分冗长和复杂。此时,可以使用cssText属性一次性设置多个样式属性。 下面是一些可以帮助你了解如何使用cssText属性的攻略: 简介 在JavaScript中,每个元素都有一个style属性…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部