各种常见文件的文件头及其含义

根据文件的后缀名识别文件类型并不准确,可以使用文件的头信息进行识别:
以下是各类文件的头:
JPEG (jpg),文件头:FFD8FFE1
PNG (png),文件头:89504E47
GIF (gif),文件头:47494638
TIFF (tif),文件头:49492A00
Windows Bitmap (bmp),文件头:424D
CAD (dwg),文件头:41433130
Adobe Photoshop (psd),文件头:38425053
Rich Text Format (rtf),文件头:7B5C727466
XML (xml),文件头:3C3F786D6C
HTML (html),文件头:68746D6C3E
Email [thorough only] (eml),文件头:44656C69766572792D646174653A
Outlook Express (dbx),文件头:CFAD12FEC5FD746F
Outlook (pst),文件头:2142444E
MS Word/Excel (xls.or.doc),文件头:D0CF11E0
MS Access (mdb),文件头:5374616E64617264204A
WordPerfect (wpd),文件头:FF575043
Postscript (eps.or.ps),文件头:252150532D41646F6265
Adobe Acrobat (pdf),文件头:255044462D312E
Quicken (qdf),文件头:AC9EBD8F
Windows Password (pwl),文件头:E3828596
ZIP Archive (zip),文件头:504B0304
RAR Archive (rar),文件头:52617221
Wave (wav),文件头:57415645
AVI (avi),文件头:41564920
Real Audio (ram),文件头:2E7261FD
Real Media (rm),文件头:2E524D46
MPEG (mpg),文件头:000001BA
MPEG (mpg),文件头:000001B3
Quicktime (mov),文件头:6D6F6F76
Windows Media (asf),文件头:3026B2758E66CF11
MIDI (mid),文件头:4D546864
检测文件类型的代码如下:
Java代码   收藏代码
  1. import java.io.File;  
  2. import java.io.FileInputStream;  
  3. import java.io.IOException;  
  4. import java.util.HashMap;  
  5. import java.util.Map;  
  6.   
  7. public class FileTypeDetector {  
  8.     private static Map<String,String> head2FileType = new HashMap<String,String>();  
  9.     static{  
  10.         head2FileType.put("FFD8FFE1""jpg");  
  11.         head2FileType.put("89504E47""png");  
  12.         head2FileType.put("47494638 ""gif");  
  13.         head2FileType.put("49492A00""tif");  
  14.         head2FileType.put("424D""bmp");  
  15.         head2FileType.put("41433130""dwg");  
  16.         head2FileType.put("38425053 ""psd");  
  17.         head2FileType.put("7B5C727466""rtf");  
  18.         head2FileType.put("3C3F786D6C""xml");  
  19.         head2FileType.put("68746D6C3E ""html");  
  20.         head2FileType.put("44656C69766572792D646174""eml");  
  21.         head2FileType.put("CFAD12FEC5FD746F ""dbx");  
  22.         head2FileType.put("2142444E""pst");  
  23.         head2FileType.put("D0CF11E0""xls/doc");  
  24.         head2FileType.put("5374616E64617264204A""mdb");  
  25.         head2FileType.put("FF575043""wpd");  
  26.         head2FileType.put("252150532D41646F6265""eps/ps");  
  27.         head2FileType.put("255044462D312E""pdf");  
  28.         head2FileType.put("E3828596""pwl");  
  29.         head2FileType.put("504B0304""zip");  
  30.         head2FileType.put("52617221""rar");  
  31.         head2FileType.put("57415645""wav");  
  32.         head2FileType.put("41564920""avi");  
  33.         head2FileType.put("2E7261FD""ram");  
  34.         head2FileType.put("2E524D46""rm");  
  35.         head2FileType.put("000001BA""mpg");  
  36.         head2FileType.put("000001B3""mpg");  
  37.         head2FileType.put("6D6F6F76""mov");  
  38.         head2FileType.put("3026B2758E66CF11""asf");  
  39.         head2FileType.put("4D546864""mid");  
  40.     }  
  41.       
  42.     private static String bytesToHexString(String fileName) throws IOException{  
  43.         FileInputStream fis = null;  
  44.         StringBuilder stringBuilder = new StringBuilder();  
  45.         try{  
  46.             fis = new FileInputStream(new File(fileName));  
  47.             byte[] b = new byte[4];  
  48.             fis.read(b, 0, b.length);  
  49.   
  50.             for (int i = 0; i < b.length; i++) {  
  51.                 int v = b[i] & 0xFF;  
  52.                 String hv = Integer.toHexString(v);  
  53.                 if (hv.length() < 2) {  
  54.                     stringBuilder.append(0);  
  55.                 }  
  56.                 stringBuilder.append(hv);  
  57.             }  
  58.         }finally{  
  59.             if(fis != null)  
  60.                 fis.close();  
  61.         }  
  62.         return stringBuilder.toString().toUpperCase();  
  63.     }  
  64.       
  65.     public static String fileType(String fileName) throws IOException{  
  66.         String head = bytesToHexString(fileName);  
  67.         return head2FileType.get(head);  
  68.     }  
  69.       
  70.     public static void main(String[] args) throws IOException {  
  71.         System.out.println(fileType("d://aaa.png"));  
  72.     }  

### OmegaConf 配置管理简介 OmegaConf 是一个强大的 Python 库,用于处理复杂的配置文件。它支持多种数据结构(如字典、列表)以及 YAML 文件的解析和操作。以下是有关如何使用 OmegaConf 的详细介绍。 #### 创建配置对象 可以通过 `OmegaConf.create` 方法创建一个新的配置对象。该方法可以接受字典、YAML 字符串或其他兼容的数据结构作为输入[^1]。 ```python import omegaconf from omegaconf import OmegaConf config_dict = {"database": {"host": "localhost", "port": 6379}} config = OmegaConf.create(config_dict) print(OmegaConf.to_yaml(config)) # 将配置转换为 YAML 格式的字符串 ``` #### 加载外部 YAML 文件 如果需要加载外部 YAML 文件,可使用 `OmegaConf.load` 方法。这使得程序能够轻松读取并应用存储在磁盘上的配置文件。 ```python yaml_file_path = "./example_config.yaml" file_conf = OmegaConf.load(yaml_file_path) # 打印加载后的配置内容 print(file_conf.database.host) # 输出 'localhost' ``` #### 合并多个配置源 当存在多个配置来源时(例如默认设置与命令行参数),可以使用 `OmegaConf.merge` 来无缝合并它们。此功能允许开发者优先级较高的配置覆盖较低级别的配置项。 ```python default_configs = OmegaConf.create({"model": {"type": "resnet50"}}) cli_args = OmegaConf.from_dotlist(["model.type=vgg16"]) merged_config = OmegaConf.merge(default_configs, cli_args) assert merged_config.model.type == "vgg16" # 命令行参数成功覆盖默认值 ``` #### 动态更新配置 除了静态定义外,还可以通过访问器动态修改现有配置中的字段。这种灵活性非常适合运行时调整某些超参数或环境变量。 ```python dynamic_update = file_conf.copy() dynamic_update.database.port = 8080 print(dynamic_update.database.port) # 输出新的端口号 8080 ``` #### 错误处理机制 为了防止非法赋值破坏整个系统的稳定性,OmegaConf 提供了严格的模式控制选项。启用严格模式后,任何未声明过的键都将引发异常提示用户修正错误。 ```python strict_mode_enabled = file_conf.copy() strict_mode_enabled.set_struct(True) # 开启只读保护状态 try: strict_mode_enabled.new_field = True # 此处会抛出 AttributeError 异常 except AttributeError as e: print(f"Catch expected error: {e}") ``` --- ### 总结 以上展示了 OmegaConf 在不同场景下的典型用法,包括但不限于初始化配置实例、加载外部资源、融合多层设定逻辑以及实施安全防护措施等方面的功能特性。希望这些例子能帮助快速掌握其核心概念和技术要点!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值