一、文件类型简介
文件类型是指文件所属的分类,例如扩展名为“.doc”的文件就属于文档类文件,扩展名为“.jpg”、“.png”等的文件就属于图片类文件。在Java中,通过文件读取或文件输入流等方式获取到的文件通常只能获取到文件的扩展名,而无法直接获取文件类型。因此,需要通过解析文件头部信息或者通过MimeTypeMap类等方式来获取文件类型。
二、基于解析文件头信息的实现方式
每种文件类型的文件头信息是不同的,通过读取文件头部信息,就可以判断该文件的类型。
import java.io.FileInputStream;
import java.io.IOException;
public class FileTypeUtil {
/**
* 根据文件路径获取文件头部信息
*
* @param filePath 文件路径
* @return 文件头部信息
*/
public static String getFileHeader(String filePath) throws IOException {
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(filePath);
byte[] bytes = new byte[28];
inputStream.read(bytes, 0, 28);
StringBuilder stringBuilder = new StringBuilder();
for (byte b : bytes) {
stringBuilder.append(String.format("%02X ", b));
}
return stringBuilder.toString().trim();
} finally {
if (inputStream != null) {
inputStream.close();
}
}
}
/**
* 判断文件类型
*
* @param filePath 文件路径
* @return 文件类型
*/
public static String getFileType(String filePath) throws IOException {
String fileHeader = getFileHeader(filePath);
if (fileHeader == null || fileHeader.length() == 0) {
return null;
}
fileHeader = fileHeader.toUpperCase();
if (fileHeader.startsWith("FFD8FF")) {
return "图片文件";
} else if (fileHeader.startsWith("89504E47")) {
return "图片文件";
} else if (fileHeader.startsWith("47494638")) {
return "图片文件";
} else if (fileHeader.startsWith("424D")) {
return "图片文件";
} else if (fileHeader.startsWith("784E4350")) {
return "矢量图文件";
} else if (fileHeader.startsWith("25504446")) {
return "PDF文件";
} else {
return "未知文件类型";
}
}
}
三、基于MimeTypeMap类的实现方式
MimeTypeMap类提供了获取文件类型的方法,通过调用这个方法即可获取到文件类型。这种方式适用于Android平台。
import android.webkit.MimeTypeMap;
public class FileTypeUtil {
/**
* 判断文件类型
*
* @param filePath 文件路径
* @return 文件类型
*/
public static String getFileType(String filePath) {
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
String extension = MimeTypeMap.getFileExtensionFromUrl(filePath);
return mimeTypeMap.getMimeTypeFromExtension(extension.toLowerCase());
}
}
四、其他实现方式
除了上述两种方式外,还有一些第三方库可以帮助我们获取文件类型,例如Apache Tika、FileTypeDetector等,读者可以根据实际情况选择使用。
五、总结
通过解析文件头部信息或者通过MimeTypeMap类等方式来获取文件类型都是可行的。读者可以根据实际情况选择使用其中的一种或者多种方式来实现文件类型的获取。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/259679.html
微信扫一扫
支付宝扫一扫