java获取一个文本文件的编码(格式)信息

前言:

文本文件是我们在windows平台下常用的一种文件格式,

这种格式会随着操作系统的语言不同,而出现其默认的编码不同

那么如何使用程序获取“文本文件”的编码方式呢?

文件编码的格式决定了文件可存储的字符类型,所以得到文件的类型至关重要

下文笔者讲述获取一个文本文件的格式信息的方法分享,如下所示:

现思路:

  • 通过获取文件流的前3个字节
  • 判断其值的方式,即可获取文本文件的编码方式

例:

package com.java265.other;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class Test {
    /*
     * java265.com 获取文本文件的编码方式
     *
     **/
    public static void main(String[] args)   {
      File file = new File("E://person/java265.com/java.txt");
      System.out.println(GetEncoding(file));
      }
    public static String GetEncoding(File file)
    {
        String charset = "GBK";
        byte[] first3Bytes = new byte[3];
        try {
            boolean checked = false;
            InputStream is = new FileInputStream(file);
            int read = is.read(first3Bytes, 0, 3);

            if (read == -1)
                return charset;
            if (first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE) {
                charset = "UTF-16LE";
                checked = true;
            } else if (first3Bytes[0] == (byte) 0xFE
                    && first3Bytes[1] == (byte) 0xFF) {
                charset = "UTF-16BE";
                checked = true;
            } else if (first3Bytes[0] == (byte) 0xEF
                    && first3Bytes[1] == (byte) 0xBB
                    && first3Bytes[2] == (byte) 0xBF) {
                charset = "UTF-8";
                checked = true;
            }else if (first3Bytes[0] == (byte) 0xA
                    && first3Bytes[1] == (byte) 0x5B
                    && first3Bytes[2] == (byte) 0x30) {
                charset = "UTF-8";
                checked = true;
            }else if (first3Bytes[0] == (byte) 0xD
                    && first3Bytes[1] == (byte) 0xA
                    && first3Bytes[2] == (byte) 0x5B) {
                charset = "GBK";
                checked = true;
            }else if (first3Bytes[0] == (byte) 0x5B
                    && first3Bytes[1] == (byte) 0x54
                    && first3Bytes[2] == (byte) 0x49) {
                charset = "windows-1251";
                checked = true;
            }
            //bis.reset();
            InputStream istmp = new FileInputStream(file);
            if (!checked) {
                int loc = 0;
                while ((read = istmp.read()) != -1) {
                    loc++;
                    if (read >= 0xF0)
                        break;
                    if (0x80 <= read && read <= 0xBF)
                        break;
                    if (0xC0 <= read && read <= 0xDF) {
                        read = istmp.read();
                        if (0x80 <= read && read <= 0xBF)
                            continue;
                        else
                            break;
                    } else if (0xE0 <= read && read <= 0xEF) {
                        read = istmp.read();
                        if (0x80 <= read && read <= 0xBF) {
                            read = istmp.read();
                            if (0x80 <= read && read <= 0xBF) {
                                charset = "UTF-8";
                                break;
                            } else
                                break;
                        } else
                            break;
                    }
                }
            }
            is.close();
            istmp.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return charset;
    }
}

到此这篇关于java获取一个文本文件的编码(格式)信息的文章就介绍到这了,更多相关java获取文本编码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java过滤html标签获取纯文本信息的实例

    如下所示: package com.lyt.base.util; import java.util.regex.Pattern; public class FilterHtmlUtil { public static String Html2Text(String inputString){ String htmlStr = inputString; //含html标签的字符串 String textStr =""; java.util.regex.Pattern p_script;

  • Java使用正则表达式获取子文本的方法示例

    本文实例讲述了Java使用正则表达式获取子文本的方法.分享给大家供大家参考,具体如下: 原来,group是针对()来说的,group(0)就是指的整个串,group(1) 指的是第一个括号里的东西,group(2)指的第二个括号里的东西. 最近学习正则表达式,发现Java中的一些术语与其他地方描述的有所差异.就这个问题卡了我半天,坑爹,写到博客,方便其他新学的朋友.比如Java正则表达式中的"组"概念与<正则表达式必知必会>一书中讲述的"子表达式"其实是

  • Java 获取Html文本中的img标签下src中的内容方法

    如下所示: /** * 得到网页中图片的地址 * @param sets html字符串 */ public Set<String> getImgStr(String htmlStr) { Set<String> pics = new HashSet<String>(); String img = ""; Pattern p_image; Matcher m_image; String regEx_img = "<img.*src\\

  • Java编程获取文本框的内容实例解析

    在JAVA中如何获取文本框中输入的值,并保存在一个文件之中.具体代码如下: import java.io.*; import javax.swing.*; import java.awt.FlowLayout; import java.awt.event.*; public class WriterTo extends JFrame implements ActionListener{ JButton b;JTextField t; public WriterTo(){ super("文本框内容

  • java获取文件编码,jsoup获取html纯文本操作

    maven引入获取编码的jar <dependency> <groupId>com.ibm.icu</groupId> <artifactId>icu4j</artifactId> <version>67.1</version> </dependency> 获取文件编码 package com.lovnx.note.util; import com.ibm.icu.text.CharsetDetector; i

  • java获取一个文本文件的编码(格式)信息

    前言: 文本文件是我们在windows平台下常用的一种文件格式, 这种格式会随着操作系统的语言不同,而出现其默认的编码不同 那么如何使用程序获取“文本文件”的编码方式呢? 文件编码的格式决定了文件可存储的字符类型,所以得到文件的类型至关重要 下文笔者讲述获取一个文本文件的格式信息的方法分享,如下所示: 现思路: 通过获取文件流的前3个字节 判断其值的方式,即可获取文本文件的编码方式 例: package com.java265.other; import java.io.File; import

  • Java获取代码中方法参数名信息的方法

    前言 大家都知道随着java8的使用,在相应的方法签名中增加了新的对象Parameter,用于表示特定的参数信息,通过它的getName可以获取相应的参数名.即像在代码中编写的,如命名为username,那么在前台进行传参时,即不需要再编写如@Parameter("username")类的注解,而直接就能进行按名映射. 如下的代码参考所示: public class T { private interface T2 { void method(String username, Stri

  • Java获取字符串编码格式实现思路

    Java——获取字符串编码格式 判断一个字符串的编码格式: public static String getEncoding(String str) { String encode = "GB2312"; try { if (isEncoding(str, encode)) { // 判断是不是GB2312 return encode; } } catch (Exception exception) { } encode = "ISO-8859-1"; try {

  • java如何获取用户登录ip、浏览器信息、SessionId

    目录 java获取用户登录ip.浏览器信息.SessionId 1.获取用户登录ip 2.获取用户所使用的浏览器信息 3.获取用户SessionId 获取用户登录的ip地址(考虑多种请求头的情况) java获取用户登录ip.浏览器信息.SessionId 1.获取用户登录ip //获取用户登录ip; String loginIp = request.getHeader("X-Forwarded-For"); if (loginIp == null || loginIp.length()

  • Java如何获取一个随机数 Java猜数字小游戏

    本文实例为大家分享了Java获取一个随机数(及猜数字小游戏)的具体代码,供大家参考,具体内容如下 Math类概述: 该类Math包含用于执行基本数值运算的方法,例如基本指数,对数,平方根和三角函数. Math所有类都是静态的.可以直接类名.调用. 获取随机数的办法: 代码如下 public class SuiJi { public static void main(String[] args) { double d = Math.random(); System.out.println(d);

  • SpringBoot文件上传控制及Java 获取和判断文件头信息

    之前在使用SpringBoot进行文件上传时,遇到了很多问题.于是在翻阅了很多的博文之后,总算将上传功能进行了相应的完善,便在这里记录下来,供自己以后查阅. 首先,是建立一个标准的SpringBoot 的工程,这里使用的IDE是Intellij Idea,为了方便配置,将默认的配置文件替换为了application.yml. 1.在index.html中进行文件上传功能,这里使用的文件上传方式是ajax,当然也可以按照自己的具体要求使用传统的表单文件上传. <!DOCTYPE html> &l

  • Java获取当前操作系统的信息实例代码

    主流有几种方法,一种是用下面的函数 publicstaticStringgetProperty(Stringkey) 键 相关值的描述 java.version java.version Java 运行时环境版本 java.vendor java.vendor Java 运行时环境供应商 java.vendor.url java.vendor.url Java 供应商的 URL java.home java.home Java 安装目录 java.vm.specification.version

  • java代码获取jenkins数据,构建历史等信息方式

    本篇文章主要介绍如何获取jenkins构建历史数据等信息,不包含java构建等操作. 1.jenkins所需jar,后续如有缺少可百度自行补齐. <!--jenkins所需jar包开始--> <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency> <groupId>org.apache.httpcomponents</gr

  • JS获取一个表单字段中多条数据并转化为json格式

    如图需要获取下面两个li标签里面的数据,然后传给后台:而后台接收的数据格式是json的,所以需要把两个li里面的信息转化为以下格式的. {recieverName:小红,recieverPhone:12341234,recieverAddress:中国湖南},{recieverName:小明,recieverPhone:12345678,recieverAddress:中国上海} 代码如下: var recieverArr = []; //全局变量 var recieverMsg = {}; /

  • java获取客服端信息的方法(系统,浏览器等)

    如下所示: String agent = request.getHeader("user-agent"); System.out.println(agent); StringTokenizer st = new StringTokenizer(agent,";"); st.nextToken(); String userbrowser = st.nextToken(); System.out.println(userbrowser); String useros =

随机推荐