`
VitoCorleoneDemo
  • 浏览: 5487 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java,根据头文件判断文件类型

阅读更多

web判断文件的格式的时候,我们一般都是通过扩展名来判断,这个有点不太靠谱和安全。一般要判断是利用头文件来判断。下面是利用头文件来判断的代码:

package com.app.util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class T {
	 public static String bytesToHexString(byte[] src){     
	        StringBuilder strBuilder = new StringBuilder();     
	        if (src == null || src.length <= 0) {     
	            return null;     
	        }     
	        for (int i = 0; i < src.length; i++) {     
	            int v = src[i] & 0xFF;     
	            String strhs = Integer.toHexString(v);     
	            if (strhs.length() < 2) {     
	            	strBuilder.append(0);     
	            }     
	            strBuilder.append(strhs);     
	        }     
	        return strBuilder.toString();     
	    }
	 
	 /**
	  * 根据文件流读取图片文件真实类型
	  * @param is
	  * @return
	  */
	public static String getTypeByStream(FileInputStream is) {
		byte[] b = new byte[4];
		try {
			is.read(b, 0, b.length);
		} catch (IOException e) {
			e.printStackTrace();
		}
		String type = bytesToHexString(b).toUpperCase();
		if (type.contains("FFD8FF")) {
			return "jpg";
		} else if (type.contains("89504E47")) {
			return "png";
		} else if (type.contains("47494638")) {
			return "gif";
		} else if (type.contains("49492A00")) {
			return "tif";
		} else if (type.contains("424D")) {
			return "bmp";
		}
		return type;
	}
	
	public static void main(String args[]) {
//	     String src = "D:/workspace//8129.jpg";
//	     String src = "D:/workspace//temp/1.gif";
	     String src = "D:/003-004-join.jpg";
	     FileInputStream is = null;
		try {
			is = new FileInputStream(src);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}  
//	        byte[] b = new byte[4];  
//	        is.read(b, 0, b.length);  
//	        System.out.println(bytesToHexString(b));
	       
	        String type = getTypeByStream(is);
	        System.out.println(type);
	}
	
}

 网上搜索了一些头文件的格式,但是强调一下,txt文件没有固定的头名,需要另外考虑,供参考:

  1. 用文件头判断。直接读取文件的前几个字节。  
  2. 常用文件的文件头如下:  
  3. JPEG (jpg),文件头:FFD8FF  
  4. PNG (png),文件头:89504E47  
  5. GIF (gif),文件头:47494638  
  6. TIFF (tif),文件头:49492A00   
  7. Windows Bitmap (bmp),文件头:424D  
  8. CAD (dwg),文件头:41433130  
  9. Adobe Photoshop (psd),文件头:38425053  
  10. Rich Text Format (rtf),文件头:7B5C727466  
  11. XML (xml),文件头:3C3F786D6C  
  12. HTML (html),文件头:68746D6C3E  
  13. Email [thorough only] (eml),文件头:44656C69766572792D646174653A  
  14. Outlook Express (dbx),文件头:CFAD12FEC5FD746F   
  15. Outlook (pst),文件头:2142444E   
  16. MS Word/Excel (xls.or.doc),文件头:D0CF11E0  
  17. MS Access (mdb),文件头:5374616E64617264204A  
  18. WordPerfect (wpd),文件头:FF575043  
  19. Postscript. (eps.or.ps),文件头:252150532D41646F6265  
  20. Adobe Acrobat (pdf),文件头:255044462D312E  
  21. Quicken (qdf),文件头:AC9EBD8F   
  22. Windows Password (pwl),文件头:E3828596   
  23. ZIP Archive (zip),文件头:504B0304   
  24. RAR Archive (rar),文件头:52617221   
  25. Wave (wav),文件头:57415645   
  26. AVI (avi),文件头:41564920   
  27. Real Audio (ram),文件头:2E7261FD   
  28. Real Media (rm),文件头:2E524D46   
  29. MPEG (mpg),文件头:000001BA   
  30. MPEG (mpg),文件头:000001B3  
  31. Quicktime (mov),文件头:6D6F6F76   
  32. Windows Media (asf),文件头:3026B2758E66CF11   
  33. MIDI (mid),文件头:4D546864 
分享到:
评论

相关推荐

    java通过文件头内容判断文件类型

    在Java编程中,判断文件类型通常不是通过文件扩展名,而是通过读取文件的头部字节来识别。这是因为有些文件可能没有明确的扩展名,或者扩展名被恶意篡改。文件头内容通常包含特定的标识符,这些标识符是文件格式的...

    java实现上传文件类型检测过程解析

    然后,使用 HashMap 缓存文件头信息,通过文件头信息来判断文件的真正类型。 以下是 Java 实现上传文件类型检测过程解析的示例代码: ```java import java.io.*; import java.util.HashMap; public class ...

    根据头信息判断文件类型

    根据头信息判断文件类型是计算机科学中的一个常见技术,它基于这样一个事实:大多数文件格式在开始部分都会包含一些特定的字节序列,这些序列被称为“魔术数字”或“文件签名”,用于标识文件的类型。这种方法在很多...

    java如何实现判断文件的真实类型

    Java如何实现判断文件的真实类型 Java判断文件真实类型是非常重要的,因为在文件传输过程中,为了安全验证,对于手工改动文件后缀名产生的伪造文件进行判断过滤。Java判断文件真实类型依靠的是文件的头部编码信息。...

    Android中Java根据文件头获取文件类型的方法

    为了提高识别的准确性,我们可以依据文件头信息来判断文件类型。文件头通常包含特定的字节序列,这些序列是文件格式的标识符。 本文将详细介绍一种在Android中使用Java根据文件头获取文件类型的实现方法。这个方法...

    SEGY数据文件读取解析程序

    本项目提供了一个用Java语言编写的SEGY数据文件读取和解析程序,它还利用了Visualization Toolkit (VTK)库来实现简单的数据可视化。 Java是一种多平台、面向对象的编程语言,具有良好的跨平台性、丰富的类库以及...

    Java判断上传图片格式的实例代码

    我们可以使用FileInputStream来读取文件头,然后将其转换为十六进制字符串,最后使用TypeDict类来判断文件的格式类型。 下面是具体的代码实现: 首先,我们需要定义一个TypeDict类来存储常用的文件头信息: ```...

    jsp头文件.txt

    根据提供的文件信息,我们可以深入探讨JSP(JavaServer Pages)技术中的头部文件配置与使用,以及JSP在Java Web开发中的重要角色。 ### JSP头部文件概述 JSP页面是Java Web开发中的一种动态网页技术,它允许将静态...

    Java开发技术大全(500个源代码).

    HelloNative.java 准备调用C函数的java文件 HelloNative.lib 用VC编译生成的静态库文件 HelloNative.obj 用VB编译生成的目标文件 HelloNativeTest.java 测试本地化是否成功的类文件 instanceVar.java 定义一个...

    Java课后题答案,JAVA

    3. **Java字节码解释器**:在Java中,`java.exe`是Java字节码解释器,它负责解释执行`.class`文件中的字节码,使得程序能够在不同操作系统上运行,体现Java的平台无关性。 4. **JDK、JRE和JVM**:JDK(Java ...

    常用代码,经常需要的

    2. **Java编程**: `java 根据头文件码判断文件类型.txt`可能讲解了如何在Java程序中通过文件的魔数或头信息来识别文件类型,这对于处理未知类型的文件很有用。而`统计Java源文件的代码行.txt`可能涉及到源代码分析,...

    一段代码演示C++根据路径判定是目录还是文件,文件搜索,文件夹遍历等问题.pdf

    在C++中,没有像Java那样的内置函数可以直接判断路径是目录还是文件。在Windows系统下,可以使用`_stat`函数从`sys/stat.h`头文件获取文件状态信息。`_stat`结构体中的`st_mode`字段包含了文件类型信息,其中`_S_...

    java语言程序设计

    - **头文件与宏定义**:Java不使用头文件,也不支持宏定义,而是使用`import`语句导入类和包,并使用`final`关键字定义常量。 - **多重继承**:Java不支持传统的多重继承,而是通过接口来实现多重继承。 - **数据...

    《JAVA语言》作业集答案.pdf

    - 头文件:Java不依赖头文件,简化了维护。 - 常量定义:Java用final关键字,C++用宏定义。 - 数据类型长度:Java固定,跨平台性好。 - 类型转换:Java更安全,有类型检查。 - 结构和联合:Java无此概念,用类...

    Java基础知识总结范文.pdf

    JAVA_HOME应指向JDK的安装目录,PATH应包含JDK的bin目录,以便能找到Java可执行文件,而CLASSPATH则指定类库的搜索路径。 Java中的注释有三种类型:单行注释(//)、多行注释(/*...*/)和文档注释(/**...*/),后...

    java源码:拼写检查器 Hunspell.gz

    文件名称列表中的"hunspell-1.3.2"可能是指Hunspell库的一个版本,通常包括了必要的头文件、库文件以及词典文件。这些文件对于理解Hunspell的工作机制和构建Java源码项目是必不可少的。开发者可以结合源代码和这些库...

    log4cxx 头文件和编译好的动态库

    开发者可以根据需求自定义 Appender 类型。 5. **Layout** Layout 用于格式化日志消息。比如,PatternLayout 允许自定义输出格式,SimpleLayout 提供简单的默认格式。通过配置,可以选择不同的布局模式,以便于...

    JAVA程序员面试问题

    在读取或写入文件时,文件指针会根据操作移动,从而定位下一次操作的位置。在C/C++等低级语言中,开发者需要显式地管理文件指针,以控制读写位置。而在Java中,使用InputStream和OutputStream类时,文件位置的管理被...

    PolicySpi.rar_java security

    `PolicySpi.c`和`define.h`这两个文件看起来可能是C语言或者C++的源代码和头文件,这可能表示在Java的JNI(Java Native Interface)环境下,有人尝试用原生代码实现`PolicySpi`的部分功能。JNI允许Java代码调用本地...

    Cocos2dx环境下java和C.docx

    将C++文件放置在项目适当的位置,并确保正确地编译成库文件供Java调用。 综上所述,通过JNI接口,可以在Cocos2dx环境下轻松实现C++与Java之间的相互调用,从而更好地发挥Cocos2dx跨平台游戏引擎的优势。

Global site tag (gtag.js) - Google Analytics