如何检查文件是否为excel文件?

时间:2015-12-21 14:32:59

标签: java excel validation

我正在编写一个程序,并且必须选择一个将由程序读取的excel文件。我现在的问题是,如果文件是excel文件,我怎么能证明?。

在此方法中选择文件:

JButton btnFile = new JButton("Select Excel File");
btnFile.setPreferredSize(new Dimension(40, 40));
btnFile.addActionListener(new ActionListener() {
    // Handle open button action.
    public void actionPerformed(ActionEvent e) {
        final JFileChooser fc = new JFileChooser();
        int returnVal = fc.showOpenDialog(frame);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            file = fc.getSelectedFile();
            // This is where a real application would open the file.
            System.out.println("File: " + file.getName() + ".");
        } else {
            System.out.println("Open command cancelled by user.");
        }
        System.out.println(returnVal);
    }
});

5 个答案:

答案 0 :(得分:6)

MimetypesFileTypeMap.getContentType(String)[JDK 6]

  

使用Java SE 6引入了类MimetypesFileTypeMap,以使用“.mime.types格式”提供“通过文件扩展名对文件进行数据类型化”。该类的Javadoc解释了在给定系统中类查找MIME类型文件条目的位置。我的示例使用了我的JDK 8安装开箱即用的示例。下一个代码清单演示了如何使用javax.activation.MimetypesFileTypeMap。

public String identifyFileTypeUsingMimetypesFileTypeMap(final String fileName)  
{      
   final MimetypesFileTypeMap fileTypeMap = new MimetypesFileTypeMap();  
   return fileTypeMap.getContentType(fileName);  
} 

Files.probeContentType(Path)[JDK 7]

  

Java SE 7引入了高度实用的Files类,该类的Javadoc简洁地描述了它的用法:“此类仅包含对文件,目录或其他类型文件进行操作的静态方法”,“在大多数情况下,此处定义的方法将委托给关联的文件系统提供程序来执行文件操作。“

     

java.nio.file.Files类通过使用“已安装的FileTypeDetector实现”提供方法probeContentType(Path)“探测文件的内容类型”(Javadoc还注意到“给定的调用Java虚拟机维护系统范围的文件类型检测器列表“)。

public String identifyFileTypeUsingFilesProbeContentType(final String fileName)  
{  
   String fileType = "Undetermined";  
   final File file = new File(fileName);  
   try  
   {  
      fileType = Files.probeContentType(file.toPath());  
   }  
   catch (IOException ioException)  
   {  
      out.println(  
           "ERROR: Unable to determine file type for " + fileName  
              + " due to exception " + ioException);  
   }  
   return fileType;  
}  

有关详细信息,请访问此link

答案 1 :(得分:1)

检查文件名中的文件扩展名'xlsx'。但是,要验证所选文件是否实际上是excel文件,您需要一个库来验证,例如Apache POI HSSF。 Refer this answer for more information.

答案 2 :(得分:1)

您可以使用Apache Commons Api检查文件扩展名

String filename = file.getName();
if(!FilenameUtils.isExtension(filename,"xls")){
  JOptionPane.showMessageDialog(null, "Choose an excel file!");
}

http://commons.apache.org/io/api-release/index.html?org/apache/commons/io/package-summary.html

您也可以这样做。您必须检查您正在考虑的所有文件类型。我只是向您提供您应该考虑的方向:

String filename = file.getName();
    String extension = filename.substring(filename.lastIndexOf(".") + 1, filename.length());

    String excel = "xls";
    if (!extension.equals(excel)){
       JOptionPane.showMessageDialog(null, "Choose an excel file!");

    }
    else {
        String filepath = file.getAbsolutePath();
        JOptionPane.showMessageDialog(null, filepath);
        String upload = UploadPoData.initialize(null, filepath);

         if ("OK".equals(upload)) {
     JOptionPane.showMessageDialog(null,"Upload Successful!");
    }
    }

答案 3 :(得分:0)

我同意K139和UUIIUI的答案,但仅供参考,您可以使用tika之类的框架来进行此类控制。

答案 4 :(得分:-1)

您可以向filechooser添加一个过滤器,只能选择.xlsx文件(您可以在返回时使用OR添加更多扩展名)

    fc = new JFileChooser();

    fc.setFileFilter(new FileFilter() {

      public String getDescription() {
          return "Excel Documents (.xlsx)";
      }

      public boolean accept(File f) {
          if (f.isDirectory()) {
              return true;
          } else {
              String filename = f.getName().toLowerCase();
              return filename.endsWith(".xlsx") ;
          }
      }
   });