Java 实战:用文件魔数可靠检测文件类型
要可靠地检测文件类型,你可以使用Java的文件魔数(Magic Number)来实现。文件魔数是文件开头的几个字节,用于标识文件的类型。 以下是一个简单的Java代码示例,演示如何通过比较文件的魔数来判断文件类型: ```java import java.io.FileInputStream; import java.io.IOException; public class FileTypeChecker { public static String getFileType(String filePath) { try (FileInputStream fis = new FileInputStream(filePath)) { byte[] buffer = new byte[8]; fis.read(buffer, 0, buffer.length); if (isJPEG(buffer)) { return "JPEG"; } else if (isPNG(buffer)) { return "PNG"; } else if (isGIF(buffer)) { return "GIF"; } else if (isPDF(buffer)) { return "PDF"; } else { return "Unknown"; } } catch (IOException e) { e.printStackTrace(); return "Error"; } } private static boolean isJPEG(byte[] buffer) { // JPEG 文件的魔数是 0xFFD8FF return buffer[] == (byte) 0xFF && buffer[1] == (byte) 0xD8 && buffer[2] == (byte) 0xFF; } private static boolean isPNG(byte[] buffer) { // PNG 文件的魔数是 0x89504E47 return buffer[0] == (byte) x89 && buffer[1] == (byte) 0x50 && buffer[2] == (byte) 0x4E && buffer[3] == (byte) 0x47; } private static boolean isGIF(byte[] buffer) { // GIF 文件的魔数是 "GIF" return buffer[0] == (byte) x47 && buffer[1] == (byte) 0x49 && buffer[2] == (byte) 0x46 && buffer[3] == (byte) 0x38; } private static boolean isPDF(byte[] buffer) { // PDF 文件的魔数是 "%PDF" return buffer[0] == (byte) x25 && buffer[1] == (byte) 0x50 && buffer[2] == (byte) 0x44 && buffer[3] == (byte) 0x46; } public static void main(String[] args) { String filePath = "path/to/your/file"; String fileType = getFileType(filePath); System.out.println("File type: " + fileType); } } ``` 你可以根据需要扩展更多的文件类型和对应的魔数判断逻辑。注意,这种方法只能判断文件类型的可能性,不能保证100% 准确。对于可疑的或不受信任的文件,还需要进行更详细的文件格式检查和验证。 ######[AI写代码神器 | 2002点数解答 | 2023-12-28 11:24:18]
- 批处理文件:依据参数表.xlsx精准修改文件.txt中p、t、s值(GPT | 811点数解答 | 2024-12-05 12:58:37)400
- 用批处理和Python实现“参数表.xlsx”与“文件.txt”数据匹配及修改(讯飞星火 | 531点数解答 | 2024-12-05 13:20:42)380
- 批处理文件:依据参数表.xlsx精准修改文件.txt特定参数值(阿里通义 | 495点数解答 | 2024-12-05 13:22:26)358
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)420
- MySQL 数据库操作:用德鲁伊连接池和 Spring JDBC 实现 MVC 架构下 Student 表操作及事务测试全解析(字节豆包 | 1115点数解答 | 2025-03-19 11:17:31)302
- Spring JDBC+德鲁伊连接池:MVC架构下MySQL学生表查询、事务验证及代码实现全解析(DeepSeek | 1275点数解答 | 2025-03-19 11:21:32)289
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)322
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1196
- Python 实现课程信息输入存储:含输入检测与字典构建全流程 (GPT | 448点数解答 | 2024-05-30 15:08:47)236
- Python 利用 win32com 库:将 Excel 转换为 A4 横向 PDF 并单独打印首列(字节豆包 | 507点数解答 | 2025-03-10 15:48:12)319
- "Java Code: Uncovering Stock Statistics through CSV File Reading"(字节豆包 | 66点数解答 | 2024-11-13 15:31:04)332
- Windows环境下C/C++项目开发:完整目录、文件路径及编译脚本设置示例(字节豆包 | 459点数解答 | 2024-11-02 20:38:01)244