标签:

今天通过网络资源研究了一下如何使用Java代码获取文件、文件流或字符串的编码方式,现将代码与大家分享:

package com.ghj.packageoftool;

import info.monitorenter.cpdetector.io.ASCIIDetector;

import info.monitorenter.cpdetector.io.ByteOrderMarkDetector;

import info.monitorenter.cpdetector.io.CodepageDetectorProxy;

import info.monitorenter.cpdetector.io.JChardetFacade;

import info.monitorenter.cpdetector.io.ParsingDetector;

import info.monitorenter.cpdetector.io.UnicodeDetector;

import java.io.ByteArrayInputStream;

import java.io.File;

import java.io.InputStream;

import java.net.URL;

import java.nio.charset.Charset;

/**

* 文件工具类

*

* @author 高焕杰

*/

public class FileTool {

/**

* 获取本地文件的编码格式

*

* @param file 要判断的文件编码格式

*

* @author 高焕杰

*/

public static String getLocalFileEncode(File localFile) {

/*

* cpDetector是探测器,它把探测任务交给具体的探测实现类的实例完成。

* cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。

* cpDetector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的字符集编码。cpDetector是基于统计学原理的,不保证完全正确。

*/

CodepageDetectorProxy codepageDetector = CodepageDetectorProxy.getInstance();

codepageDetector.add(new ParsingDetector(false));//ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于指示是否显示探测过程的详细信息,为false不显示。

codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。

codepageDetector.add(new ByteOrderMarkDetector());

codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII编码测定

codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族编码的测定

Charset charset = null;

try {

charset = codepageDetector.detectCodepage(localFile.toURI().toURL());

if (charset != null){

return charset.name();

}

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

/**

* 获得远程URL文件的编码格式

*

* @param url 远程文件的URL路径

*

* @author 高焕杰

*/

public static String getURLFileEncode(URL url) {

/*

* cpDetector是探测器,它把探测任务交给具体的探测实现类的实例完成。

* cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。

* cpDetector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的字符集编码。cpDetector是基于统计学原理的,不保证完全正确。

*/

CodepageDetectorProxy codepageDetector = CodepageDetectorProxy.getInstance();

codepageDetector.add(new ParsingDetector(false));//ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于指示是否显示探测过程的详细信息,为false不显示。

codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。

codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII编码测定

codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族编码的测定

Charset charset = null;

try {

charset = codepageDetector.detectCodepage(url);

if (charset != null){

return charset.name();

}

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

/**

* 获得文件流的编码格式

*

* @param inputStream 文件流

*

* @author 高焕杰

*/

public static String getInputStreamEncode(InputStream inputStream) {

/*

* cpDetector是探测器,它把探测任务交给具体的探测实现类的实例完成。

* cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。

* cpDetector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的字符集编码。cpDetector是基于统计学原理的,不保证完全正确。

*/

CodepageDetectorProxy codepageDetector = CodepageDetectorProxy.getInstance();

codepageDetector.add(new ParsingDetector(false));//ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于指示是否显示探测过程的详细信息,为false不显示。

codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。

codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII编码测定

codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族编码的测定

Charset charset = null;

try {

charset = codepageDetector.detectCodepage(inputStream, 0);

if (charset != null){

return charset.name();

}

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

/**

* 获得字符串的编码格式

*

* @param stringValue 要判断的文件编码格式字符串

*

* @author 高焕杰

*/

public static String getStringEncode(String stringValue) {

/*

* cpDetector是探测器,它把探测任务交给具体的探测实现类的实例完成。

* cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、ByteOrderMarkDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。

* cpDetector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的字符集编码。cpDetector是基于统计学原理的,不保证完全正确。

*/

CodepageDetectorProxy codepageDetector = CodepageDetectorProxy.getInstance();

codepageDetector.add(new ParsingDetector(false));//ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于指示是否显示探测过程的详细信息,为false不显示。

codepageDetector.add(JChardetFacade.getInstance());//JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。

codepageDetector.add(ASCIIDetector.getInstance());//ASCIIDetector用于ASCII编码测定

codepageDetector.add(UnicodeDetector.getInstance());//UnicodeDetector用于Unicode家族编码的测定

Charset charset = null;

try {

InputStream inputStream = new ByteArrayInputStream(stringValue.getBytes());

charset = codepageDetector.detectCodepage(inputStream, 3);

if (charset != null){

return charset.name();

}

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

}

由于上面代码依赖了很多jar包,所以请直接下载使用MyEclipse开发的Demo。        【

标签:

java 读取流的字符编码格式_如何使用Java代码获取文件、文件流或字符串的编码方式...相关推荐

  1. 软件的基本是要处理好”算法“及其基础(一)流-字-字符(包括某个数字、字母、符号和某个汉字等)-字符串-字节动态数组-字节-整数之间的转化关系和算法

    目录 软件的基本是要处理好"算法"及其基础(一): 流->计算机字->字符(包括某个数字.字母.符号和某个汉字等)->字符串->字节动态数组->字节- ...

  2. java解析xml中文字符乱码_各种Java中文乱码的处理方法

    对于Java,由于默认的编码方式是UNICODE,所以用中文也易出问题,常见的解决是: String s2 = new String(s1.getBytes("ISO-8859-1" ...

  3. Java中xmp标签的作用_如何在Java中从JPEG读取XMP面部数据

    我已经将Picasa的面部数据保存在JPEG文件中(在XMP中),现在我试图用Java读取该信息.到目前为止,我失败了,将不胜感激. 我正在尝试使用metadata-extractor库(尽管任何其他 ...

  4. java中的标识符和关键字_浅谈java中的标识符、修饰符和关键字

    合法标识符 Java语言中,对于变量,常量,函数,语句块均有名字,我们统统称之为Java标识符.标识符是用来给类.对象.方法.变量.接口和自定义数据类型命名的. 组成:Java标识符由数字,字母和下划 ...

  5. 简述java中流的概念和划分_浅谈Java中流的概念与用途

    Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读写数据的标准方法.任何Java中表示数据源的对象都会提供以数据流的方式读写它的 ...

  6. java中的switch的规则_细细讲述Java技术开发的那些不为人知的规则

    本文介绍的Java规则的说明分为3个主要级别,中级是平时开发用的比较多的级别,在今后将陆续写出其他的规则.遵守了这些规则可以提高程序的效率.使代码又更好的可读性等. 一.在finally方法里关掉in ...

  7. 孙鑫java高清完整版(课件+视频)_孙鑫Java高清完整版(课件+视频) - 程序语言 - 小木虫 - 学术 科研 互动社区...

    本套光盘由孙鑫老师亲自授课录制.内容涵盖面广,从入门到精通,授课通俗易懂,分析问题独到精辟,学员通过本套光盘的学习,能够快速掌握Java编程语言,成为Java高手. 1.循序渐进 从自学者很难弄明白的 ...

  8. java程序的装载与检查_浅谈Java类型装载、连接与初始化

    类型装载.连接与初始化 Java虚拟机通过装载.连接和初始化一个Java类型,使该类型可以被正在运行的Java程序所使用.其中装载就是把二进制形式的Java class文件读入Java虚拟机中去;连接 ...

  9. java中常量final的用法_详解Java中final的用法

    本文主要介绍了Java中final的使用方法,final是java的关键字,本文就详细说明一下它的使用方法,需要的朋友可以参考下 概念 final 具有"不可改变的"的含义,可以修 ...

最新文章

  1. python哪一版好用-学习 Python 用哪本书好?
  2. python基础教程:操作符
  3. html asp textbox,ASP.NET中 TextBox 文本输入框控件的使用方法
  4. PyChram简单使用教程
  5. 局域网中计算机网络密码查看,Win10怎么查看电脑上已知的wifi网络密码
  6. 【图像处理】透视变换 Perspective Transformation(含续加部分)
  7. java ui设计用什么_什么是UI设计?
  8. 看我发现了什么好东西? Java Optional,绝对值得一学 | 原力计划
  9. 绝地求生服务器维护6.28,绝地求生6月28号更新完怎么进不去 绝地求生更新维护到几点6.28...
  10. ERP小白必读|十篇ERP初学者经典论文
  11. 上古卷轴5json文件修改_捏脸工具-RaceMenu
  12. 有限元计算计算机配置,关于有限元分析的电脑配置问题
  13. 中文分词(上)——获取和Word2Vec模型构建
  14. python计算圆柱体的表面积和体积_圆柱体体积和表面积计算(一)
  15. 生成验证码时,验证码图片不显示,报错信息如下:Can‘t create output stream;Can‘t create cache file
  16. 软件工程知识点总结——第一、二部分
  17. Nuscenes 完整版数据集批量下载
  18. vscode安装插件以及配置anaconda
  19. JavaScript函数式编程之函子
  20. 程序员不得不知道的英语词汇

热门文章

  1. shell /dev/null
  2. 微信小程序----map组件实现(获取定位城市天气或者指定城市天气数据)
  3. MyBatis原理分析之四:一次SQL查询的源码分析
  4. 数据结构学习(十三)、快速排序
  5. C#中Winform程序中如何实现多维表头【不通过第三方报表程序】
  6. PHP basename() 函数
  7. virtual hust 2013.6.20 数论基础题目 D - Just the Facts
  8. Google Chrome(谷歌浏览器) 发布下载
  9. ASP.NET性能调整之解决Server Too Busy错误
  10. visual studio配置第三方库