一、文件類型簡介
文件類型是指文件所屬的分類,例如擴展名為「.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/zh-hk/n/259679.html
微信掃一掃
支付寶掃一掃