网上一搜,有很多根据文件头判断是否是excel。测试机器是mac 系统,均不能满足需求。经大佬提示,使用Files。代码片段如下
File file = new File("填入本机excel路径")
final Path path = Paths.get(file.toURI());
final String restult = Files.probeContentType(path);
System.out.println("content-type" + restult);
上面代码经过测试在windows均能正常判断,mac还是识别不了,但不影响。txt经过测试也能够识别。
zip 也能进行判断,搜索到的也可以使用,经测试可用
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
public class CheckZipTools {
private static byte[] ZIP_HEADER_1 = new byte[]{80, 75, 3, 4};
private static byte[] ZIP_HEADER_2 = new byte[]{80, 75, 5, 6};
public static boolean isArchiveFile(File file) {
if (file == null) {
return false;
}
if (file.isDirectory()) {
return false;
}
boolean isArchive = false;
InputStream input = null;
try {
input = new FileInputStream(file);
byte[] buffer = new byte[4];
int length = input.read(buffer, 0, 4);
if (length == 4) {
isArchive = (Arrays.equals(ZIP_HEADER_1, buffer)) || (Arrays.equals(ZIP_HEADER_2, buffer));
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
}
}
}
return isArchive;
}
}
zip具体通过魔法数来进行判断的