java 单例模式(Lazy Initialization)实现遍历文件夹下所有excel文件且返回其运行时间

单例模式Singleton介绍

  • 定义

在java核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例

  • 实现思路
    将该类的构造方法定义为私有方法,这样其他处的代码就无法通过调用该类的构造方法来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例;

在该类内提供一个静态方法,当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用。

  • Lazy Initialization
  1. 单例的实例在第一次被使用时创建,而不是在类加载时就立即创建。
  2. 由于它在多线程环境下可能会导致多个实例被创建,因此不推荐在多线程环境中使用
  3. 为了解决同步开销问题,可以使用双重检查锁定机制。这种方式只在instance为null时才进行同步。
  • 举例(maven)版
    实现遍历文件夹下所有excel文件的时间对比
    一、在pom.xml文件中插入如下代码块
xml 复制代码
    <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.17.1</version> <!-- 使用最新的稳定版本 -->
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.17.1</version> <!-- 使用最新的稳定版本 -->
        </dependency>
        <!-- Apache HttpClient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.13</version>
        </dependency>

        <!-- Apache POI for Excel -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>5.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.2.2</version>
        </dependency>

        <!-- Jackson for JSON parsing -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.13.4.2</version>
        </dependency>
    </dependencies>

二、点击右侧maven工程管理

刷新maven库

三、创建ExcelFileManager java类

java 复制代码
package com.test_Ana;

import java.io.*;

public class ExcelFileManager {
    // 私有静态变量,持有类的唯一实例
    private static volatile ExcelFileManager instance;

    // 私有构造函数,防止外部直接创建对象
    private ExcelFileManager() {}

    // 公共静态方法,返回类的唯一实例
    public static ExcelFileManager getInstance() {
        if (instance == null) { // 第一次检查
            synchronized (ExcelFileManager.class) {
                if (instance == null) { // 第二次检查
                    instance = new ExcelFileManager();
                }
            }
        }
        return instance;
    }

    // 方法来遍历文件夹中的所有Excel文件
    public void traverseExcelFiles(String folderPath) {
        long startTime = System.currentTimeMillis(); // 记录开始时间
        File folder = new File(folderPath);
        File[] listOfFiles = folder.listFiles();

        if (listOfFiles != null) {
            for (File file : listOfFiles) {
                if (file.isFile() && file.getName().endsWith(".xls") || file.getName().endsWith(".xlsx")) {
                    // 处理Excel文件,例如读取内容等
                    System.out.println("Processing: " + file.getName());
                }
            }
        }
        long endTime = System.currentTimeMillis(); // 记录结束时间
        System.out.println("Time taken: " + (endTime - startTime) + " ms"); // 输出运行时间
    }
}

三、在main中调用ExcelFileManager类

java 复制代码
package com.test_Ana;

public class Main {
    public static void main(String[] args) {
        // 假设你的Excel文件存放在D:\ExcelFiles路径下
        String folderPath = "C:\\Users\\17435\\Desktop\\temp";
        ExcelFileManager excelFileManager = ExcelFileManager.getInstance();
        excelFileManager.traverseExcelFiles(folderPath);
    }
}

运行结果如下:

相关推荐
开开心心就好5 分钟前
Excel批量加密工具,一键保护多个文件
java·javascript·人工智能·安全·excel·音视频·语音识别
Caster_Z7 分钟前
Java把word转HTML格式
java·html·word
用户1472583699 分钟前
Springfox Swagger相关的NullPointerException
java
2501_9228955824 分钟前
基于SpringBoot和Leaflet集成在线天气服务的区县当前天气WebGIS实战
java·spring boot·后端
苹果醋325 分钟前
[MySQL] MySQL 版本不支持 ST_Distance_Sphere替代方案和解决方案
java·运维·spring boot·mysql·nginx
天天摸鱼的java工程师37 分钟前
Spring事务什么时候会失效?常见业务场景详解与修复方案
java·后端·面试
AA-代码批发V哥1 小时前
Maven之依赖管理
java-ee·maven
打野二师兄1 小时前
Spring Boot 自动配置:从 2.x 到 3.x 的进化之路
java·spring boot·后端
Monkey-旭2 小时前
Android JNI 语法全解析:从基础到实战
android·java·c++·c·jni·native
魑魅魍魉都是鬼2 小时前
随缘玩 一: 代理模式
android·java·代理模式