2024-06-11 15:26信息 • 发布者:

要判断一个 文件是否是 Excel 格式,在 Java 中通常可以通过检查文件的扩展名或者使用特定库来读取文件头信息来实现。 这里提供两种方法:

方法 1: 检查文件扩展名

文件的扩展名通常可以指示文件的类型。 虽然这不是最可靠的方法, 但对大多数情况来说足够用。 你可以使用 Java 的 java.io.File 类来检查文件的扩展名。

 import  java.io.File;

 public class ExcelFileChecker {
      public static boolean isExcelFile(String filePath ) {
         String fileExtension = "";
          int dotIndex = filePath.lastIndexOf('.');
          if (dotIndex != -1) {
             fileExtension  = filePath.substring(dotIndex + 1);
          }
         return "xlsx".equalsIgnoreCase(file Extension) || "xls".equalsIgnoreCase(fileExtension );
      }
 }

方法 2: 使用 Apache POI 库

Apache POI 是一个 Java 库, 用于读写 Microsoft Office 文件格式, 包括 Excel。 使用 POI 可以更准确地检查一个文件是否是有效的 Excel 格式。

首先, 你需要添加 Apache POI 的依赖到你的项目中。

 <dependency>
     <groupId>org.apache.poi</groupId >
     <artifactId>poi-ooxml</artifactId>
     <version >4.1.2</version>
 </dependency>

然后, 你可以使用如下代码来读取文件头信息并确定它是否是一个 Excel 文件。

 import  org.apache.poi.ss.usermodel.Workbook;
  import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  import org.apache.poi.hssf.usermodel.HSSFWorkbook;

  import java.io.FileInputStream;
  import java.io.IOException;

 public class ExcelFile Checker {
     public static boolean isExcelFile(String  filePath) {
         try (FileInputStream inputStream  = new FileInputStream(filePath)) {
             //  尝试以 XSSFWorkbook 解析文件, 如果成功,则是 .xlsx 格式
             if (XSSFWorkbook.isEnc ryptedOrInvalid(inputStream)) {
                 return  false;
              }
             Workbook workbook = new X SSFWorkbook(inputStream);
              // 关闭工作簿以释放资源
             workbook.close ();
              return true;
          } catch (IOException e) {
             // 文件 可能不是 Excel 格式或不存在
             return false;
          }
     }
 }

在这个示例中, 我们尝试使用 XSSFWorkbook 来创建一个 Workbook 对象。 如果文件是加密的或者无效的, isEncryptedOrInvalid 方法将返回 true。 如果能够成功创建 Workbook 对象并且文件没有被加密或标记为无效, 那么我们可以确认这个文件是有效的 Excel 格式。

请注意, 上述代码仅检查 .xlsx 格式, 如果你还需要支持 .xls 格式, 你可以添加对 HSSFWorkbook 的支持。

这种方法比检查文件扩展名更为可靠, 但是需要注意的是, 由于需要读取文件内容, 因此可能会有一些性能上的开销。