文本文件编码识别
作用:识别不同编码格式的文本文件
依据:根据文本文件开头几个字节来判断文件的编码格式(txt文件的开头会多出几个字节,分别是FF、FE(Unicode),
FE、FF(Unicode big endian),EF、BB、BF(UTF-8))
工具类:FileUtil
1
package cn.com.liuwt.file;2
import java.io.InputStreamReader;3
import java.io.FileInputStream;4

5

public class FileUtil
{6

public FileUtil()
{7
}8
///根据文件路径返回编码格式9
public static String getFileEncode(String path) 10

11
throws java.io.IOException12

{13
java.io.RandomAccessFile raf=null;14
String encode="";15
try16

{17
raf=new java.io.RandomAccessFile(path,"r");18
raf.seek(0);19
int flag1=0;20
int flag2=0;21
int flag3=0;22
if(raf.length()>=2)23

{24
flag1 = raf.readUnsignedByte();25
flag2 = raf.readUnsignedByte();26
}27
if(raf.length()>=3)28

{29
flag3 = raf.readUnsignedByte();30
}31
encode = getEncode(flag1,flag2,flag3);32
}33
finally34

{35
if(raf!=null)36
raf.close();37
return encode;38
}39
40
}41
private static String getEncode(int flag1,int flag2,int flag3)42

{43
String encode="";44
// txt文件的开头会多出几个字节,分别是FF、FE(Unicode),45

46
//FE、FF(Unicode big endian),EF、BB、BF(UTF-8)47
if(flag1==255&&flag2==254)48

{49
encode="Unicode";50
}51
else if(flag1==254&&flag2==255)52

{53
encode="UTF-16";54
}55
else if(flag1==239&&flag2==187&&flag3==191)56

{57
encode="UTF-8";58
}59

60
return encode;61
}62
///根据文件路径直接返回文件流63
public static InputStreamReader getInputStreamReader(String path)64

65
throws java.io.IOException66

{67
java.io.InputStreamReader isr=null;68
String encode=getFileEncode(path);69
if(encode.equals(""))70

{71
isr = new java.io.InputStreamReader(72

73
new java.io.FileInputStream(path));74
}75
else76

{77
isr=new java.io.InputStreamReader(78

79
new java.io.FileInputStream(path),encode);80
}81

82
return isr;83
}84

public static void main(String[] args) throws Exception
{85
FileUtil fileutil = new FileUtil();86
getFileEncode("D:\\tztest.axl");87
}88
}89

90

91

简单示例:
1
package cn.com.liuwt.file;2
import java.io.*;3

public class FileOper
{4

public FileOper()
{5
}6
public static void main(String[] args) 7

8
throws java.io.IOException9

{10
java.io.InputStreamReader isr=null;11
java.io.BufferedReader br=null;12
try13

{14
String path="D:\\tt.txt";15
isr=FileUtil.getInputStreamReader(path);16
br=new BufferedReader(isr);17
String str=null;18
while((str=br.readLine())!=null)19

{20
System.out.println(str);21
}22
}23
finally24

{25
if(isr!=null)26
isr.close();27
if(br!=null)28
br.close();29
}30
}31
}32

33

浙公网安备 33010602011771号