java 怎么根据InputStream获取文件的类型
时间: 2023-10-25 14:14:18 浏览: 332
Java根据文件内容获取文件类型
可以使用Java IO中的FileInputStream类读取文件的前几个字节,根据这些字节判断文件类型。常见的文件类型判断方法如下:
1. 判断文件类型的魔数(Magic Number):魔数是一种特殊的标识符,通常在文件的开头几个字节中存储。不同类型的文件有不同的魔数,可以通过比较文件的前几个字节来判断文件类型。
2. 判断文件类型的扩展名:根据文件名的后缀来判断文件类型,但是这种方法并不可靠,因为文件名可能被修改或者没有扩展名。
以下是一个简单的示例代码,可以根据文件的前几个字节判断文件类型:
```java
import java.io.*;
public class FileTypeDetector {
public static String detectFileType(InputStream inputStream) throws IOException {
byte[] header = new byte[8];
inputStream.read(header, 0, 8);
String fileType = null;
if (isJPEG(header)) {
fileType = "JPEG";
} else if (isPNG(header)) {
fileType = "PNG";
} else if (isGIF(header)) {
fileType = "GIF";
} else if (isBMP(header)) {
fileType = "BMP";
} else {
fileType = "Unknown";
}
return fileType;
}
private static boolean isJPEG(byte[] header) {
if (header[0] == (byte)0xFF && header[1] == (byte)0xD8) {
return true;
}
return false;
}
private static boolean isPNG(byte[] header) {
if (header[0] == (byte)0x89 && header[1] == (byte)0x50
&& header[2] == (byte)0x4E && header[3] == (byte)0x47
&& header[4] == (byte)0x0D && header[5] == (byte)0x0A
&& header[6] == (byte)0x1A && header[7] == (byte)0x0A) {
return true;
}
return false;
}
private static boolean isGIF(byte[] header) {
if (header[0] == (byte)0x47 && header[1] == (byte)0x49
&& header[2] == (byte)0x46 && header[3] == (byte)0x38
&& (header[4] == (byte)0x37 || header[4] == (byte)0x39)
&& header[5] == (byte)0x61) {
return true;
}
return false;
}
private static boolean isBMP(byte[] header) {
if (header[0] == (byte)0x42 && header[1] == (byte)0x4D) {
return true;
}
return false;
}
}
```
这个示例代码实现了根据文件的前几个字节判断JPEG、PNG、GIF和BMP文件类型。在使用时,只需要将文件的InputStream传入detectFileType方法即可。
阅读全文