/*
* JavaXYQ Engine
*
* javaxyq@2008 all rights.
* http://www.javaxyq.com
*/
package com.javaxyq.tools;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* @author ����ΰ
* @history 2008-7-6 ����ΰ �½�
*/
public class FileUtil {
public static final String TCP_FILE_FLAG = "53 50";//SP
public static final String MP3_FILE_FLAG = "49 44 33";//ID3
public static final String MP3_FILE2_FLAG = "FF F2";//?mp3
public static final String MIDI_FILE_FLAG = "4D 54 68 64";// MThd
public static final String JPG_FILE_FLAG = "FF D8";
public static final String PNG_FILE_FLAG = "89 50 4E 47 0D 0A 1A 0A";
public static final String TGA_FILE_FLAG = "00 00 02 00 00";
public static final String TGA_FILE_RLE_FLAG = "00 00 10 00 00";
public static final String GIF_FILE_FLAG = "47 49 46";//GIF
public static final String BMP_FILE_FLAG = "42 4D";//BM
public static final String WAV_FILE_FLAG = "52 49 46 46";//RIFF
public static final String WDFP_FILE_FLAG = "50 46 44 57";//PFDW
public static final String WDFX_FILE_FLAG = "58 46 44 57";//XFDW
public static final String WDFH_FILE_FLAG = "48 46 44 57";//HFDW
public static final String MAP01_FILE_FLAG = "30 2E 31 4D";//0.1M
public static final Map<String, String> fileTypes = new HashMap<String, String>();
static {
fileTypes.put(TCP_FILE_FLAG, FileObject.TCP_FILE);
fileTypes.put(JPG_FILE_FLAG, FileObject.JPG_FILE);
fileTypes.put(MP3_FILE_FLAG, FileObject.MP3_FILE);
fileTypes.put(MP3_FILE2_FLAG, FileObject.MP3_FILE);
fileTypes.put(PNG_FILE_FLAG, FileObject.PNG_FILE);
fileTypes.put(TGA_FILE_FLAG, FileObject.TGA_FILE);
fileTypes.put(TGA_FILE_RLE_FLAG, FileObject.TGA_RLE_FILE);
fileTypes.put(GIF_FILE_FLAG, FileObject.GIF_FILE);
fileTypes.put(MIDI_FILE_FLAG, FileObject.MIDI_FILE);
fileTypes.put(BMP_FILE_FLAG, FileObject.BMP_FILE);
fileTypes.put(WAV_FILE_FLAG, FileObject.WAV_FILE);
fileTypes.put(WDFP_FILE_FLAG, FileObject.WDF_FILE);
fileTypes.put(WDFX_FILE_FLAG, FileObject.WDF_FILE);
fileTypes.put(WDFH_FILE_FLAG, FileObject.WDF_FILE);
fileTypes.put(MAP01_FILE_FLAG, FileObject.MAP_FILE);
}
public static String getContentType(FileObject fileObject) {
String type = "unknown";
byte[] data = new byte[100];
try {
if (fileObject != null) {
if (fileObject.isDirectory()) {
return FileObject.DIRECTORY;
}
fileObject.getDataStream().read(data);
}
Set<String> keys = fileTypes.keySet();
for (String key : keys) {
int byteCount = key.split(" ").length;
if (toHexString(data, 0, byteCount).equals(key)) {
return fileTypes.get(key);
}
}
System.out.printf("unknown file:[%s ..]\n", toHexString(data, 0, 10));
} catch (Exception e) {
System.out.println("get content type error! node=" + fileObject);
e.printStackTrace();
}
return type;
}
public static String toHexString(byte[] buf, int offset, int length) {
StringBuilder output = new StringBuilder();
for (int i = offset; i < length; i++) {
String strHex = Integer.toHexString(buf[offset + i] & 0xFF);
if (strHex.length() < 2) {
output.append('0');
}
output.append(strHex);
output.append(' ');
}
output.deleteCharAt(output.length() - 1);
return output.toString().toUpperCase();
}
}