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使用token简单鉴权的具体实现方法

    一、Token简单鉴权的原理 Token鉴权是一种前后端分离的权限验证方式,具体的原理如下: 用户登录时请求后端API,后端验证用户名和密码是否正确,如果正确,将返回一个Token给前端。 前端将Token保存在本地(通常是localStorage或sessionStorage),后续请求时需要将Token附带在请求头中发送给后端。 后端验证请求头中的Tok…

    Java 2023年5月20日
    00
  • SpringSecurity Jwt Token 自动刷新的实现

    下面是SpringSecurity Jwt Token 自动刷新的实现的完整攻略。 1. 什么是Jwt Token? Jwt Token(也称为 Json Web Token)是一种基于 JSON 格式的身份验证标准。通常用于 RESTful API,作为一种简单、轻量级的身份验证机制,用于跨域身份验证,以及在分布式系统中传递身份信息。它包含了三部分: He…

    Java 2023年5月20日
    00
  • MySql修改数据库编码为UTF8避免造成乱码问题

    以下是MySql修改数据库编码为UTF8的攻略,具体步骤如下: 步骤一:备份数据库 在进行数据库编码修改之前,为了防止意外情况导致数据丢失,应该先备份好原有的数据库。备份有多种方法,常见的有使用phpMyAdmin或通过mysqldump命令备份。 示例一:使用phpMyAdmin备份数据库 打开phpMyAdmin,选择要备份的数据库。 点击“导出”选项卡…

    Java 2023年5月20日
    00
  • Java Hibernate使用SessionFactory创建Session案例详解

    下面是详细讲解“Java Hibernate使用SessionFactory创建Session案例详解”的攻略,包括了相关的示例代码。 什么是SessionFactory? SessionFactory是Hibernate框架中一个重要的接口,用来创建Session。在使用Hibernate进行开发时,我们通常都会使用SessionFactory来获取一个S…

    Java 2023年5月19日
    00
  • 如何将mybatis配置到springmvc中

    如何将 MyBatis 配置到 Spring MVC 中 MyBatis 是一款非常流行的 ORM 框架,它可以帮助我们简化数据库操作。在 Spring MVC 中,我们可以将 MyBatis 配置到项目中,以便更方便地使用 MyBatis。本文将详细讲解如何将 MyBatis 配置到 Spring MVC 中,并提供两个示例说明。 配置 MyBatis 在…

    Java 2023年5月18日
    00
  • Java byte数组操纵方式代码实例解析

    Java byte数组操纵方式代码实例解析 简介 Java中的byte数组具有很多强大的操纵方式,使用这些操纵方式,我们可以灵活地操作byte数组中的每一个字节,完成各种各样的任务。 在本文中,我们将介绍几种Java中byte数组的操纵方式,并提供代码示例,帮助读者更好地理解和学习。 操作方式 1. 将byte数组转换为String 将byte数组转换为St…

    Java 2023年5月26日
    00
  • Spring Boot 异步框架的使用详解

    SpringBoot异步框架的使用详解 Spring Boot提供了异步执行任务的能力。这样的好处是可以让Tomcat等容器可以释放当前线程,从而不会阻塞其他的请求,并且优化服务器资源,从而提供更好的性能。 异步框架概述 Spring Boot中异步框架主要包括异步调用和异步任务两方面。 异步调用 直接从控制器中异步执行一个函数。当这个异步函数执行完成之后,…

    Java 2023年5月15日
    00
  • SpringBoot Http远程调用的方法

    介绍SpringBoot远程调用HTTP接口的方法主要有以下两种: 一、使用Spring的RestTemplate Pom.xml中引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-star…

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