Java如何实现判断文件真实类型的攻略如下:
1.使用后缀名判断文件类型
Java可以通过文件后缀名来判断文件类型。例如,如果文件名以".txt"结尾,则是文本文件。这种方法适用于大多数文件类型,但不适用于所有文件。以下是示例代码:
import java.io.File;
public class FileTypeChecker {
public static String getFileTypeBySuffix(String filePath) {
String type = "";
String fileName = new File(filePath).getName();
if (fileName.indexOf(".") != -1) {
String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
if ("txt".equalsIgnoreCase(suffix)) {
type = "text/plain";
} else if ("html".equalsIgnoreCase(suffix)) {
type = "text/html";
} else if (suffix.equalsIgnoreCase("gif") || suffix.equalsIgnoreCase("jpg") || suffix.equalsIgnoreCase("jpeg") || suffix.equalsIgnoreCase("png")) {
type = "image/" + suffix;
} else if (suffix.equalsIgnoreCase("pdf")) {
type = "application/pdf";
} else if (suffix.equalsIgnoreCase("doc") || suffix.equalsIgnoreCase("docx")) {
type = "application/msword";
} else if (suffix.equalsIgnoreCase("xls") || suffix.equalsIgnoreCase("xlsx")) {
type = "application/vnd.ms-excel";
} else if (suffix.equalsIgnoreCase("ppt") || suffix.equalsIgnoreCase("pptx")) {
type = "application/vnd.ms-powerpoint";
} else if (suffix.equalsIgnoreCase("zip") || suffix.equalsIgnoreCase("rar")) {
type = "application/zip";
}
}
return type;
}
}
以上代码中自动识别文件后缀名并返回相应类型的MIME类型(多功能Internet邮件扩展类型)。
2.使用魔数(magic number)判断文件类型
文件类型通常包含文件头(header)或规范(specification),可以通过魔数来识别。魔数是文件起始的一些特定字节,用于标识文件类型。我们可以读取文件的前几个字节来判断文件类型。以下是示例代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class FileTypeChecker {
public static String getFileTypeByMagic(String filePath) throws IOException {
String type = "";
InputStream is = new FileInputStream(filePath);
byte[] head = new byte[10];
is.read(head);
String fileHeader = bytesToHexString(head);
switch (fileHeader) {
case "89504e47":
type = "image/png";
break;
case "47494638":
type = "image/gif";
break;
case "ffd8ffe0":
case "ffd8ffe1":
case "ffd8ffe2":
type = "image/jpeg";
break;
case "25504446":
type = "application/pdf";
break;
case "504b34":
type = "application/zip";
break;
default:
type = "unknown";
}
return type;
}
private static String bytesToHexString(byte[] bytes) {
StringBuilder hexString = new StringBuilder();
for (byte b : bytes) {
int hex = b & 0xFF;
if (hex < 16) {
hexString.append("0");
}
hexString.append(Integer.toHexString(hex));
}
return hexString.toString();
}
}
以上代码中直接读取文件的前10个字节,并根据字节的值所对应的16进制数字来检查文件头。根据文件头的值确定文件类型。
这两种方法都可以识别文件的类型。但是,只使用文件后缀名来判断文件类型可能不够准确,因为文件名可以任意更改。使用魔数判断文件类型更加准确,因为它只是读取文件的前几个字节来确定文件类型。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java如何实现判断文件的真实类型 - Python技术站