当前位置: 首页 > 工具软件 > cpdetector > 使用案例 >

提高cpdetector库探测文件编码速度

郭业
2023-12-01

最近在做毕设,要读取txt文件,然而txt文件有时候是用不同的文件编码格式进行编码,常见的就是GBK&UTF-8。为了解决这个问题使用了cpdetector库进行文件编码探测。

private CodepageDetectorProxy detector;
detector=CodepageDetectorProxy.getInstance();
detector.add(new ParsingDetector(false));
/*一般来讲JChardetFacede就够用了,
有的文章会加上更多的例如ASCIIDetector等,但我这个毕设比较简单所以不用考虑这么多
*/
detector.add(JChardetFacade.getInstance());

对探测器初始化后,探测器的detectCodepage方法有两种使用方式。
①将URL类传入,或者将File类用file.toURL().toURL()转成URL类,然后进行探测。
②将InputStream类传入,同时指定判断长度length,然后进行探测。
由于cpdetector是基于统计学来进行探测的,最先返回的是什么探测类型则认为其大概率为此类型。
然而有些txt文件比较大,那么如果采用第一种传入参数模式的话,会导致需要长时间的进行探测,导致的问题就是用户感觉你这软件太拉胯了,体验感非常差,所以可以通过取第二种方式,指通过判断较短的长度length来返回结果,这样的话,虽然牺牲了正确率,但是保证了速度。不过大部分情况都能正常识别,不行就再让length再大点就完事了。

第二种的具体使用方式如下:

private void getEncode(String  file) throws IOException {
        InputStream is=new BufferedInputStream(new FileInputStream((file)));
        strCharsetName=detector.detectCodepage(is,1024).name();
    }

至此,检查编码格式的速度和正确性同时处于能够让人满意的结果。

 类似资料: