我正在编写一个程序,并且必须选择一个将由程序读取的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);
}
});
答案 0 :(得分: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);
}
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") ;
}
}
});