文本文件编码识别

作用:识别不同编码格式的文本文件

依据:根据文本文件开头几个字节来判断文件的编码格式(txt文件的开头会多出几个字节,分别是FF、FE(Unicode),
FE、FF(Unicode big endian),EF、BB、BF(UTF-8))

工具类:FileUtil

ContractedBlock.gifExpandedBlockStart.gifCode
 1package cn.com.liuwt.file;
 2import java.io.InputStreamReader;
 3import java.io.FileInputStream;
 4
 5ExpandedBlockStart.gifContractedBlock.gifpublic class FileUtil {
 6ExpandedSubBlockStart.gifContractedSubBlock.gif    public FileUtil() {
 7    }

 8    ///根据文件路径返回编码格式
 9   public static String getFileEncode(String path) 
10
11          throws java.io.IOException
12ExpandedSubBlockStart.gifContractedSubBlock.gif   {
13       java.io.RandomAccessFile raf=null;
14       String encode="";
15       try
16ExpandedSubBlockStart.gifContractedSubBlock.gif       {
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)
23ExpandedSubBlockStart.gifContractedSubBlock.gif           {
24               flag1 = raf.readUnsignedByte();
25               flag2 = raf.readUnsignedByte();
26           }

27           if(raf.length()>=3)
28ExpandedSubBlockStart.gifContractedSubBlock.gif           {
29                flag3 = raf.readUnsignedByte();
30           }

31            encode = getEncode(flag1,flag2,flag3);
32       }

33       finally
34ExpandedSubBlockStart.gifContractedSubBlock.gif       {
35           if(raf!=null)
36               raf.close();
37           return encode;
38       }

39       
40   }

41   private static String getEncode(int flag1,int flag2,int flag3)
42ExpandedSubBlockStart.gifContractedSubBlock.gif   {
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)
48ExpandedSubBlockStart.gifContractedSubBlock.gif       {
49           encode="Unicode";
50       }

51       else if(flag1==254&&flag2==255)
52ExpandedSubBlockStart.gifContractedSubBlock.gif       {
53           encode="UTF-16";
54       }

55       else if(flag1==239&&flag2==187&&flag3==191)
56ExpandedSubBlockStart.gifContractedSubBlock.gif       {
57           encode="UTF-8";
58       }

59
60      return encode;
61   }

62   ///根据文件路径直接返回文件流
63   public static  InputStreamReader getInputStreamReader(String path)
64
65          throws java.io.IOException
66ExpandedSubBlockStart.gifContractedSubBlock.gif   {
67       java.io.InputStreamReader isr=null;
68       String encode=getFileEncode(path);
69       if(encode.equals(""))
70ExpandedSubBlockStart.gifContractedSubBlock.gif         {
71             isr = new java.io.InputStreamReader(
72
73                       new java.io.FileInputStream(path));
74         }

75         else
76ExpandedSubBlockStart.gifContractedSubBlock.gif         {
77             isr=new java.io.InputStreamReader(
78
79                      new java.io.FileInputStream(path),encode);
80         }

81
82       return isr;
83   }

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

88}

89
90
91

 简单示例:

ContractedBlock.gifExpandedBlockStart.gifCode
 1package cn.com.liuwt.file;
 2import java.io.*;
 3ExpandedBlockStart.gifContractedBlock.gifpublic class FileOper {
 4ExpandedSubBlockStart.gifContractedSubBlock.gif    public FileOper() {
 5    }

 6    public static void main(String[] args) 
 7
 8           throws java.io.IOException
 9ExpandedSubBlockStart.gifContractedSubBlock.gif    {
10        java.io.InputStreamReader isr=null;
11        java.io.BufferedReader br=null;
12        try
13ExpandedSubBlockStart.gifContractedSubBlock.gif        {
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)
19ExpandedSubBlockStart.gifContractedSubBlock.gif         {
20             System.out.println(str);
21         }

22        }

23        finally
24ExpandedSubBlockStart.gifContractedSubBlock.gif        {
25            if(isr!=null)
26                isr.close();
27            if(br!=null)
28                br.close();
29        }

30    }

31}

32
33

转载于:https://www.cnblogs.com/liuwt0911/archive/2008/09/17/1292458.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值