Java开发提效秘籍:巧用Apache Commons IO工具库

news2025/1/24 7:28:56

一、引言

在 Java 开发的广袤领域中,输入输出(I/O)操作宛如一座桥梁,连接着程序与外部世界,从文件的读取与写入,到网络数据的传输,I/O 操作无处不在,其重要性不言而喻。然而,传统的 Java I/O 操作犹如手工打造一件复杂的工艺品,代码繁琐且易错,开发人员往往需要花费大量的时间与精力在这些基础操作上,严重影响了开发效率。

想象一下,在开发一个文件管理系统时,若采用原生 Java I/O,从文件的复制、移动到目录的递归遍历,每一步都需要精心编写大量代码,稍有不慎就可能引入难以排查的漏洞。此时,Apache Commons IO 工具库应运而生,它宛如一位经验丰富的工匠,为开发人员提供了一系列高效、便捷的工具,将复杂的 I/O 操作简化为简单的方法调用,大幅提升开发效率,让开发人员能够将更多的精力投入到核心业务逻辑的实现中。

二、Apache Commons IO 工具库简介

(一)工具库概述

Apache Commons IO 是 Apache 软件基金会旗下的一个开源项目,致力于为 Java 开发者提供一套全面且强大的工具集,专门用于处理 Java 中的输入输出功能。其诞生旨在解决 Java 原生 I/O 操作的复杂性和繁琐性,让开发者能够更加便捷、高效地进行文件和流的处理。

该工具库涵盖了文件操作、流处理、文件过滤、字节转换等多个领域,几乎囊括了 Java I/O 编程中可能涉及的所有场景。无论是简单的文件读取与写入,还是复杂的目录递归操作、网络流的管理,Apache Commons IO 都提供了相应的类和方法,极大地拓展了 Java 原生 I/O 的功能边界。

(二)优势亮点

  1. 功能丰富:提供了丰富多样的功能,涵盖文件操作的方方面面,如文件的创建、删除、复制、移动、重命名,目录的遍历、创建多级目录等,以及各种流的处理,包括字节流、字符流的读取、写入、转换等。
  2. 代码简洁:通过封装复杂的 I/O 操作逻辑,将其简化为简单的方法调用。例如,使用 FileUtils 类的 copyFile 方法,只需一行代码即可完成文件的复制,无需像原生 I/O 那样编写大量的流操作代码 。
  3. 提高开发效率:大大减少了开发者在 I/O 操作上花费的时间和精力,使开发者能够将更多的注意力集中在核心业务逻辑的实现上,从而显著提高整个项目的开发进度。
  4. 增强代码可读性:简洁明了的方法命名和调用方式,使得代码的意图一目了然。例如,使用 IOUtils 的 closeQuietly 方法关闭流,从方法名就能清晰知道其功能,增强了代码的可维护性。
  5. 性能优化:内部实现经过精心设计和优化,在处理大量数据或复杂 I/O 操作时,能够提供高效的性能表现,减少资源消耗和执行时间。
  6. 兼容性好:支持多种 Java 版本,具有良好的跨平台性,能够在不同的操作系统和 Java 环境中稳定运行,保证了项目的兼容性和可移植性。

三、核心功能与使用方法

(一)文件操作

1. 文件拷贝

在 Apache Commons IO 中,使用FileUtils.copyFile方法可轻松实现文件拷贝。例如,将source.txt文件拷贝到target.txt,代码如下:

import org.apache.commons.io.FileUtils;

import java.io.File;

import java.io.IOException;

public class FileCopyExample {

    public static void main(String[] args) {

        File source = new File("source.txt");

        File target = new File("target.txt");

        try {

            FileUtils.copyFile(source, target);

            System.out.println("文件拷贝成功!");

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

此方法接受两个参数,源文件和目标文件路径。若目标文件已存在,其内容将被源文件覆盖。

2. 文件删除

FileUtils.forceDelete方法能强制删除文件,即使文件处于只读状态或不存在也能处理。示例如下:

import org.apache.commons.io.FileUtils;

import java.io.File;

import java.io.IOException;

public class FileDeleteExample {

    public static void main(String[] args) {

        File fileToDelete = new File("toBeDeleted.txt");

        try {

            FileUtils.forceDelete(fileToDelete);

            System.out.println("文件已删除");

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

常用于清理临时文件或删除不再需要的配置文件。使用时需谨慎,因为文件一旦删除,难以恢复。

3. 文件读取与写入

读取文件内容可使用FileUtils.readFileToString方法,将文件内容读取为字符串。如读取content.txt文件内容:

import org.apache.commons.io.FileUtils;

import java.io.File;

import java.io.IOException;

public class FileReadExample {

    public static void main(String[] args) {

        File file = new File("content.txt");

        try {

            String content = FileUtils.readFileToString(file, "UTF-8");

            System.out.println("文件内容:\n" + content);

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

写入文件则可使用FileUtils.writeStringToFile方法,将字符串写入文件。若文件不存在,会自动创建。例如,将字符串写入newFile.txt

import org.apache.commons.io.FileUtils;

import java.io.File;

import java.io.IOException;

public class FileWriteExample {

    public static void main(String[] args) {

        File file = new File("newFile.txt");

        String content = "这是要写入文件的内容";

        try {

            FileUtils.writeStringToFile(file, content, "UTF-8");

            System.out.println("内容已写入文件");

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

这两个方法简化了文件读写操作,提高了开发效率。

(二)流操作

1. 流的拷贝

在处理流时,IOUtils.copy方法可实现从输入流到输出流的内容复制。例如,将一个文件输入流的内容复制到文件输出流,代码如下:

import org.apache.commons.io.IOUtils;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

public class StreamCopyExample {

    public static void main(String[] args) {

        try (FileInputStream fis = new FileInputStream("input.txt");

             FileOutputStream fos = new FileOutputStream("output.txt")) {

            IOUtils.copy(fis, fos);

            System.out.println("流拷贝完成");

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

该方法能高效处理各种类型的输入输出流,如文件流、网络流等。

2. 流的关闭

在 Java 中,正确关闭流资源至关重要。IOUtils.closeQuietly方法可忽略异常关闭流,确保资源正确释放。例如关闭一个输入流:

import org.apache.commons.io.IOUtils;

import java.io.FileInputStream;

import java.io.IOException;

public class StreamCloseExample {

    public static void main(String[] args) {

        FileInputStream fis = null;

        try {

            fis = new FileInputStream("example.txt");

            // 处理流

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            IOUtils.closeQuietly(fis);

        }

    }

}

即使在关闭流时发生异常,closeQuietly方法也不会抛出异常,避免了因异常处理不当导致的资源泄漏问题。

(三)文件名操作

1. 获取文件扩展名

通过FilenameUtils.getExtension方法可从文件名中获取扩展名。示例如下:

import org.apache.commons.io.FilenameUtils;

public class FileExtensionExample {

    public static void main(String[] args) {

        String fileName = "document.pdf";

        String extension = FilenameUtils.getExtension(fileName);

        System.out.println("文件扩展名:" + extension);

    }

}

运行结果将输出pdf,此方法在文件类型判断和处理时非常实用。

2. 获取文件名(不包含路径和扩展名)

使用FilenameUtils.getBaseName方法可提取文件名,不包含路径和扩展名。例如:

import org.apache.commons.io.FilenameUtils;

public class FileNameExample {

    public static void main(String[] args) {

        String filePath = "/home/user/documents/report.docx";

        String baseName = FilenameUtils.getBaseName(filePath);

        System.out.println("文件名(不包含路径和扩展名):" + baseName);

    }

}

输出结果为report,方便对文件名进行处理和展示。

3. 获取文件路径

FilenameUtils.getFullPath方法可获取文件的完整路径。代码示例如下:

import org.apache.commons.io.FilenameUtils;

public class FilePathExample {

    public static void main(String[] args) {

        String filePath = "C:/projects/src/main/java/com/example/FileUtils.java";

        String fullPath = FilenameUtils.getFullPath(filePath);

        System.out.println("文件完整路径:" + fullPath);

    }

}

输出结果为C:/projects/src/main/java/com/example/,在文件查找和定位场景中很有用。

(四)文件过滤

1. 创建文件过滤器

在 Apache Commons IO 中,可通过FileFilter接口创建文件过滤器。例如,创建一个按文件后缀名过滤的过滤器,代码如下:

import org.apache.commons.io.filefilter.SuffixFileFilter;

import java.io.File;

import java.io.FileFilter;

public class FileFilterExample {

    public static void main(String[] args) {

        FileFilter filter = new SuffixFileFilter(".txt");

        File directory = new File("C:/documents");

        File[] files = directory.listFiles(filter);

        if (files!= null) {

            for (File file : files) {

                System.out.println(file.getName());

            }

        }

    }

}

上述代码创建了一个只接受.txt后缀文件的过滤器,并列出指定目录下符合条件的文件。

2. 筛选文件

结合FileUtils.listFiles和自定义文件过滤器,可筛选出符合条件的文件。例如,筛选出指定目录下所有.java文件:

import org.apache.commons.io.FileUtils;

import org.apache.commons.io.filefilter.SuffixFileFilter;

import java.io.File;

import java.io.FileFilter;

import java.util.Collection;

public class FileFilterAndListExample {

    public static void main(String[] args) {

        FileFilter filter = new SuffixFileFilter(".java");

        File directory = new File("C:/projects/src/main/java/com/example");

        Collection<File> files = FileUtils.listFiles(directory, filter, null);

        for (File file : files) {

            System.out.println(file.getName());

        }

    }

}

FileUtils.listFiles方法会递归列出目录下所有符合过滤器条件的文件,方便进行批量处理。

(五)文件监控

1. 监听文件变化

FileAlterationMonitor类可创建文件和目录的监控功能,通过设置轮询间隔时间,定期检查文件系统的变化。示例如下:

import org.apache.commons.io.monitor.FileAlterationMonitor;

import org.apache.commons.io.monitor.FileAlterationObserver;

import java.io.File;

import java.io.IOException;

public class FileMonitorExample {

    public static void main(String[] args) throws Exception {

        File directory = new File("C:/monitoredDirectory");

        FileAlterationObserver observer = new FileAlterationObserver(directory);

        FileAlterationMonitor monitor = new FileAlterationMonitor(5000, observer);

        monitor.start();

        // 保持程序运行,否则监控将停止

        Thread.sleep(60000);

        monitor.stop();

    }

}

上述代码设置了每 5 秒检查一次指定目录下的文件变化。

2. 实现文件变化处理

要实现对文件创建、删除、修改等变化的处理,可通过实现FileAlterationListener接口来完成。例如:

import org.apache.commons.io.monitor.FileAlterationListener;

import org.apache.commons.io.monitor.FileAlterationObserver;

import org.apache.commons.io.monitor.FileAlterationMonitor;

import java.io.File;

import java.io.IOException;

public class FileChangeListener implements FileAlterationListener {

    @Override

    public void onStart(FileAlterationObserver observer) {

        System.out.println("文件监控开始");

    }

    @Override

    public void onDirectoryCreate(File directory) {

        System.out.println("新目录创建:" + directory.getAbsolutePath());

    }

    @Override

    public void onDirectoryChange(File directory) {

        System.out.println("目录变更:" + directory.getAbsolutePath());

    }

    @Override

    public void onDirectoryDelete(File directory) {

        System.out.println("目录删除:" + directory.getAbsolutePath());

    }

    @Override

    public void onFileCreate(File file) {

        System.out.println("新文件创建:" + file.getAbsolutePath());

    }

    @Override

    public void onFileChange(File file) {

        System.out.println("文件变更:" + file.getAbsolutePath());

    }

    @Override

    public void onFileDelete(File file) {

        System.out.println("文件删除:" + file.getAbsolutePath());

    }

    @Override

    public void onStop(FileAlterationObserver observer) {

        System.out.println("文件监控停止");

    }

    public static void main(String[] args) throws Exception {

        File directory = new File("C:/monitoredDirectory");

        FileAlterationObserver observer = new FileAlterationObserver(directory);

        observer.addListener(new FileChangeListener());

        FileAlterationMonitor monitor = new FileAlterationMonitor(5000, observer);

        monitor.start();

        Thread.sleep(60000);

        monitor.stop();

    }

}

通过实现FileAlterationListener接口的各个方法,可对文件系统的各种变化做出相应处理,满足业务需求。

四、实际应用案例

(一)文件上传功能实现

在 Web 应用开发中,文件上传是常见功能。借助 Apache Commons IO 库和 Commons FileUpload 库,可轻松实现。以一个简单的 Spring Boot 项目为例,首先需在pom.xml文件中添加依赖:

<dependency>

    <groupId>commons-fileupload</groupId>

    <artifactId>commons-fileupload</artifactId>

    <version>1.4</version>

</dependency>

<dependency>

    <groupId>org.apache.commons</groupId>

    <artifactId>commons-io</artifactId>

    <version>2.11.0</version>

</dependency>

接着创建一个控制器方法处理文件上传请求:

import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

import java.io.File;

import java.util.List;

@RestController

@RequestMapping("/upload")

public class FileUploadController {

    @PostMapping

    public String uploadFile(HttpServletRequest request) {

        try {

            boolean isMultipart = ServletFileUpload.isMultipartContent(request);

            if (isMultipart) {

                DiskFileItemFactory factory = new DiskFileItemFactory();

                ServletFileUpload upload = new ServletFileUpload(factory);

                List<FileItem> items = upload.parseRequest(request);

                for (FileItem item : items) {

                    if (!item.isFormField()) {

                        String filePath = request.getServletContext().getRealPath("") + File.separator + item.getName();

                        File file = new File(filePath);

                        item.write(file);

                    }

                }

                return "文件上传成功";

            } else {

                return "请求不是多部分内容";

            }

        } catch (Exception e) {

            e.printStackTrace();

            return "文件上传失败";

        }

    }

}

上述代码中,ServletFileUpload用于解析文件上传请求,FileItem代表上传的文件项,通过Apache Commons IO库中的File类将文件保存到服务器指定路径。

(二)数据备份与恢复

在数据备份和恢复场景中,Apache Commons IO工具库的FileUtils类可实现文件和目录的批量拷贝与恢复。假设要对一个重要的数据库备份目录进行定期备份,代码如下:

import org.apache.commons.io.FileUtils;

import java.io.File;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class DataBackup {

    public static void main(String[] args) {

        String sourceDir = "C:/data/database_backup";

        String targetDir = "C:/backup/database_backup_" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());

        try {

            FileUtils.copyDirectory(new File(sourceDir), new File(targetDir));

            System.out.println("数据备份成功");

        } catch (IOException e) {

            e.printStackTrace();

            System.out.println("数据备份失败");

        }

    }

}

在恢复数据时,只需将备份目录中的文件或目录再拷贝回原位置即可。例如:

import org.apache.commons.io.FileUtils;

import java.io.File;

import java.io.IOException;

public class DataRestore {

    public static void main(String[] args) {

        String backupDir = "C:/backup/database_backup_20241001120000";

        String targetDir = "C:/data/database_backup";

        try {

            FileUtils.copyDirectory(new File(backupDir), new File(targetDir));

            System.out.println("数据恢复成功");

        } catch (IOException e) {

            e.printStackTrace();

            System.out.println("数据恢复失败");

        }

    }

}

通过这种方式,利用FileUtils.copyDirectory方法实现了高效的数据备份与恢复操作。

(三)日志文件处理

在日志文件处理场景中,Apache Commons IO工具库可用于日志文件的读取、分析和清理。例如,要读取一个日志文件并统计其中特定错误信息出现的次数,代码如下:

import org.apache.commons.io.FileUtils;

import java.io.File;

import java.io.IOException;

import java.util.List;

public class LogAnalysis {

    public static void main(String[] args) {

        String logFilePath = "C:/logs/application.log";

        try {

            List<String> lines = FileUtils.readLines(new File(logFilePath));

            int errorCount = 0;

            for (String line : lines) {

                if (line.contains("ERROR: Database connection failed")) {

                    errorCount++;

                }

            }

            System.out.println("数据库连接失败错误出现次数: " + errorCount);

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

对于日志文件的清理,若要定期删除超过一定时间的日志文件,可结合FileUtils.forceDelete方法实现。例如,删除一周前的日志文件:

import org.apache.commons.io.FileUtils;

import java.io.File;

import java.util.Calendar;

import java.util.Date;

public class LogCleanup {

    public static void main(String[] args) {

        String logDir = "C:/logs";

        File dir = new File(logDir);

        File[] files = dir.listFiles();

        if (files!= null) {

            Calendar cal = Calendar.getInstance();

            cal.add(Calendar.DAY_OF_YEAR, -7);

            Date oneWeekAgo = cal.getTime();

            for (File file : files) {

                if (file.isFile() && file.lastModified() < oneWeekAgo.getTime()) {

                    try {

                        FileUtils.forceDelete(file);

                        System.out.println("已删除过期日志文件: " + file.getName());

                    } catch (IOException e) {

                        e.printStackTrace();

                    }

                }

            }

        }

    }

}

通过这些实际案例,充分展示了Apache Commons IO工具库在不同场景下的强大功能和便捷性,能够有效提升 Java 开发中与 I/O 操作相关的业务处理效率 。

五、使用技巧与注意事项

(一)合理选择工具类与方法

在使用 Apache Commons IO 工具库时,需依据不同的 I/O 操作需求,精准挑选合适的工具类和方法。例如,若要对文件进行复制、删除、移动等常规操作,优先选用FileUtils类;若涉及流的处理,如流的拷贝、关闭等,则使用IOUtils类。

在处理大文件时,避免使用一次性读取整个文件内容的方法,防止内存溢出。可采用FileUtils.readLines方法按行读取文件,或使用IOUtils.copyLarge方法进行流的拷贝,以提高处理效率和稳定性。

(二)注意资源管理与异常处理

在使用工具库时,资源的正确关闭和异常处理至关重要。虽然IOUtils.closeQuietly方法能忽略异常关闭流,但在某些场景下,可能需要更精细的异常处理逻辑,以确保程序的健壮性。

在进行文件操作时,要考虑文件不存在、权限不足等异常情况。例如,在使用FileUtils.forceDelete方法删除文件时,若文件无法删除,应捕获IOException异常,并进行相应的错误处理,如记录日志或向用户提示错误信息。

(三)性能优化建议

为提升文件操作和流处理的性能,可采取以下优化措施:

  1. 批量操作:在进行文件拷贝或删除等操作时,若涉及多个文件,尽量使用批量操作方法。如FileUtils.copyDirectory方法可一次性递归拷贝整个目录及其所有内容,避免逐个文件操作带来的性能开销。
  2. 缓冲处理:对于流的操作,可使用IOUtils.buffer方法将输入流或输出流包装成带有缓冲功能的流,减少对底层资源(如磁盘)的频繁访问,从而提高整体的执行效率。尤其在处理大量数据时,缓冲处理能显著提升性能。
  3. 减少不必要的操作:在编写代码时,仔细分析业务需求,避免进行不必要的文件读取、写入或流操作。例如,在对文件内容进行处理时,尽量在一次读取后完成所有必要的计算和转换,避免多次重复读取文件。

六、总结与展望

Apache Commons IO 工具库作为 Java 开发中的得力助手,以其丰富的功能、简洁的代码实现和出色的性能优化,显著提升了开发人员在 I/O 操作方面的效率和质量。通过对文件操作、流操作、文件名处理、文件过滤以及文件监控等核心功能的深入学习和实际应用,我们见证了其在各类 Java 项目中的强大适用性和价值。

在未来的 Java 开发中,随着技术的不断演进和应用场景的日益复杂,对高效 I/O 处理的需求将持续增长。Apache Commons IO 工具库有望进一步拓展其功能边界,例如在大数据处理场景下,优化对海量文件的读写和管理能力;在分布式系统中,增强对跨网络节点的文件操作支持。同时,工具库的开发者也将不断提升其性能和稳定性,以适应不断变化的技术环境和开发需求。

对于广大 Java 开发者而言,深入学习和熟练掌握 Apache Commons IO 工具库,不仅能够提升个人的开发技能和效率,还能为项目的成功实施提供有力保障。希望本文能激发大家对该工具库的探索热情,在实际开发中充分发挥其优势,创造出更加高效、稳定的 Java 应用程序 。

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

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

相关文章

总结4..

#include <stdio.h> // 定义全局变量n&#xff0c;用于表示二维数组的大小 // 定义二维数组b&#xff0c;用于标记找到单词的位置&#xff0c;初始化为0 int n, b[200][200] {0}; // 定义二维数组d&#xff0c;存储8个方向的偏移量&#xff0c;用于在二维数组中搜索…

从零开始:Spring Boot核心概念与架构解析

引言 在当今的Java开发领域&#xff0c;Spring Boot已经成为构建企业级应用的首选框架之一。它以其简洁、高效、易于上手的特点&#xff0c;极大地简化了Spring应用的开发过程。本文将从Spring Boot的核心概念入手&#xff0c;深入解析其架构设计和运行原理&#xff0c;帮助读…

深入 Flutter 和 Compose 的 PlatformView 实现对比,它们是如何接入平台控件

在上一篇《深入 Flutter 和 Compose 在 UI 渲染刷新时 Diff 实现对比》发布之后&#xff0c;收到了大佬的“催稿”&#xff0c;想了解下 Flutter 和 Compose 在 PlatformView 实现上的对比&#xff0c;恰好过去写过不少 Flutter 上对于 PlatformView 的实现&#xff0c;这次恰好…

无人机飞手考证难度增加,实操、地面站教学技术详解

随着无人机技术的快速发展和广泛应用&#xff0c;无人机飞手考证的难度确实在不断增加。这主要体现在对飞手的实操技能和地面站操作技术的要求上。以下是对无人机飞手考证中实操和地面站教学技术的详细解析&#xff1a; 一、实操教学技术详解 1. 无人机基础知识学习&#xff1…

linux下springboot项目nohup日志或tomcat日志切割处理方案

目录 1. 配置流程 2. 配置说明 其他配置选项&#xff1a; 3. 测试执行 4. 手动执行 https://juejin.cn/post/7081890486453010469 通常情况下&#xff0c;我们的springboot项目部署到linux服务器中&#xff0c;通过nohup java -jar xxx.jar &指令来进行后台运行我们…

知识图谱可视化:揭示隐藏的模式与关系

目录 前言1. 什么是知识图谱可视化1.1 知识图谱概述1.2 知识图谱可视化的定义 2. 知识图谱可视化的意义2.1 降低理解门槛2.2 帮助发现模式与洞察2.3 提升交互性与用户体验 3. 知识图谱可视化的技术实现3.1 数据处理与准备3.2 可视化技术3.3 用户交互设计 4. 知识图谱可视化的应…

深度学习基础--LSTM学习笔记(李沐《动手学习深度学习》)

前言 LSTM是RNN模型的升级版&#xff0c;神经网络模型较为复杂&#xff0c;这里是学习笔记的记录&#xff1b;LSTM比较复杂&#xff0c;可以先看&#xff1a; 深度学习基础–一文搞懂RNN 深度学习基础–GRU学习笔记(李沐《动手学习深度学习》) RNN&#xff1a;RNN讲解参考&am…

电气防火保护器为高校学生宿舍提供安全保障

摘 要&#xff1a;3月2日&#xff0c;清华大学紫荆学生公寓发生火情&#xff0c;无人员伤亡。推断起火原因系中厅内通电电器发生故障引燃周边可燃物所致。2月27日&#xff0c;贵州某高校女生宿舍发生火灾&#xff0c;现场明火得到有效控制&#xff0c;无人员受伤。2月19日&…

每打开一个chrome页面都会【自动打开F12开发者模式】,原因是 使用HBuilderX会影响谷歌浏览器的浏览模式

打开 HBuilderX&#xff0c;点击 运行 -> 运行到浏览器 -> 设置web服务器 -> 添加chrome浏览器安装路径 chrome谷歌浏览器插件 B站视频下载助手插件&#xff1a; 参考地址&#xff1a;Chrome插件 - B站下载助手&#xff08;轻松下载bilibili哔哩哔哩视频&#xff09…

C#使用WMI获取控制面板中安装的所有程序列表

C#使用WMI获取控制面板中安装的所有程序列表 WMI 全称Windows Management Instrumentation,Windows Management Instrumentation是Windows中用于提供共同的界面和对象模式以便访问有关操作系统、设备、应用程序和服务的管理信息。如果此服务被终止&#xff0c;多数基于 Windo…

企业级流程架构设计思路-基于价值链的流程架构

获取更多企业流程资料 纸上得来终觉浅&#xff0c;绝知此事要躬行 一.企业流程分级规则定义 1.流程分类分级的总体原则 2.完整的流程体系需要体现出流程的分类分级 03.通用的流程分级方法 04.流程分级的标准 二.企业流程架构设计原则 1.流程架构设计原则 流程框架是流程体…

PyTorch使用教程(8)-一文了解torchvision

一、什么是torchvision torchvision提供了丰富的功能&#xff0c;主要包括数据集、模型、转换工具和实用方法四大模块。数据集模块内置了多种广泛使用的图像和视频数据集&#xff0c;如ImageNet、CIFAR-10、MNIST等&#xff0c;方便开发者进行训练和评估。模型模块封装了大量经…

如何将自己本地项目开源到github上?

环境&#xff1a; LLMB项目 问题描述&#xff1a; 如何将自己本地项目开源到github上&#xff1f; 解决方案&#xff1a; 步骤 1: 准备本地项目 确保项目整洁 确认所有的文件都在合适的位置&#xff0c;并且项目的 README.md 文件已经完善。检查是否有敏感信息&#xff0…

ConvBERT:通过基于跨度的动态卷积改进BERT

摘要 像BERT及其变体这样的预训练语言模型最近在各种自然语言理解任务中取得了令人印象深刻的性能。然而&#xff0c;BERT严重依赖于全局自注意力机制&#xff0c;因此存在较大的内存占用和计算成本。尽管所有的注意力头都从全局角度查询整个输入序列以生成注意力图&#xff0…

2025web建议

随便收集的信息 新手入门路线推荐 第一步&#xff1a;Web安全相关概念 建议学习时间&#xff1a;2周 学习内容如下&#xff1a; 1、熟悉基本概念(SQL注入、上传、XSS、CSRF、一句话木马等)。 2、通过关键字(SQL注入、上传、XSS、CSRF、一句话木马等)进行Google。 3、阅读《Web…

用JAVA实现人工智能:采用框架Spring AI Java

Spring AI 集成人工智能&#xff0c;为Java项目添加AI功能指南 本文主旨是用实际的可操作的代码&#xff0c;介绍Java怎么通过spring ai 接入大模型。 例子使用spring ai alibaba QWen千问api完成&#xff0c;你可以跑通以后换自己的实现。QWen目前有100万免费Token额度&…

【JDBC】数据库连接的艺术:深入解析数据库连接池、Apache-DBUtils与BasicDAO

文章目录 前言&#x1f30d; 一.连接池❄️1. 传统获取Conntion问题分析❄️2. 数据库连接池❄️3.连接池之C3P0技术&#x1f341;3.1关键特性&#x1f341;3.2配置选项&#x1f341;3.3使用示例 ❄️4. 连接池之Druid技术&#x1f341; 4.1主要特性&#x1f341; 4.2 配置选项…

canvas 图片组合并进行下载

运行图片&#xff1a; 思路&#xff1a;先画一个背景图片&#xff0c;再画一个二维码定位到你想要的位置&#xff0c;最后直接下载即可&#xff0c;可以扩散一下思维&#xff0c;画简单的海报的时候&#xff0c;也可以的 源代码 <!DOCTYPE html> <html lang"en&q…

记一次升级请求创建报错问题的调查过程(Windchill)

问题现象描述&#xff1a; ​ 新建申请请求单&#xff0c;在选择某些物料时会报此错误&#xff0c;选另外的物料时又可以正常创建&#xff0c;不报此错误。 问题原因分析&#xff1a; ​ 1.分析后台日志 —没有任何进展&#xff0c;此报错应该是前端的报错 ​ 2.从前端下手…

自旋锁与CAS

上文我们认识了许许多多的锁&#xff0c;此篇我们的CAS就是从上文的锁策略开展的新概念&#xff0c;我们来一探究竟吧 1. 什么是CAS&#xff1f; CAS: 全称Compare and swap&#xff0c;字⾯意思:“比较并交换”&#xff0c;⼀个CAS涉及到以下操作&#xff1a; 我们假设内存中…