我怎样才能检查文件是否是一个Excel文件?

我正在编写一个程序,而且必须select一个将被程序读取的excel文件。 我的问题是现在,我怎么能certificate,如果该文件是一个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); } }); 

您可以添加一个filter到filechooser只能使select.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") ; } } }); 

MimetypesFileTypeMap.getContentType(String)[JDK 6]

Java SE 6引入了类MimetypesFileTypeMap,通过使用“.mime.types”格式提供“通过文件扩展名对文件进行数据types化”。 该类的Javadoc解释了在给定的系统中类查找MIMEtypes文件条目的位置。 我的例子使用了我的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简洁地描述了它的用法:“这个类完全由对文件,目录或其他types的文件进行操作的静态方法组成”,在大多数情况下,这里定义的方法将委托给关联的文件系统提供者来执行文件操作。“

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

 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; } 

欲了解更多详情,请访问此链接

检查文件名中的文件扩展名'xlsx' 。 但是,要validation所选文件是否实际上是一个excel文件,则需要一个库来validation,例如Apache POI HSSF。 请参阅此答案以获取更多信息。

您可以使用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

你也可以这样做。你将不得不检查你正在考虑的所有文件types。我只是给你提供你应该思考的方向:

 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!"); } } 

我同意K139和UUIIUI的答案,但只是为了您可以使用像tika这样的控制框架的信息。