20180129学习笔记之java获取文本文件编码格式

首先,先贴上原贴地址http://blog.163.com/wf_shunqiziran/blog/static/176307209201258102217810/

然后代码

private static  String getFilecharset(File sourceFile) {
  String charset = "GBK";
  byte[] first3Bytes = new byte[3];
  try {
   boolean checked = false;
   BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sourceFile));
   bis.mark(0);
   int read = bis.read(first3Bytes, 0, 3);
   if (read == -1) {
    return charset; //文件编码为 ANSI
   } else if (first3Bytes[0] == (byte) 0xFF
     && first3Bytes[1] == (byte) 0xFE) {
    charset = "UTF-16LE"; //文件编码为 Unicode
    checked = true;
   } else if (first3Bytes[0] == (byte) 0xFE
     && first3Bytes[1] == (byte) 0xFF) {
    charset = "UTF-16BE"; //文件编码为 Unicode big endian
    checked = true;
   } else if (first3Bytes[0] == (byte) 0xEF
     && first3Bytes[1] == (byte) 0xBB
     && first3Bytes[2] == (byte) 0xBF) {
    charset = "UTF-8"; //文件编码为 UTF-8
    checked = true;
   }
   bis.reset();
   if (!checked) {
    int loc = 0;
    while ((read = bis.read()) != -1) {
     loc++;
     if (read >= 0xF0)
      break;
     if (0x80 <= read && read <= 0xBF) // 单独出现BF以下的,也算是GBK
      break;
     if (0xC0 <= read && read <= 0xDF) {
      read = bis.read();
      if (0x80 <= read && read <= 0xBF) // 双字节 (0xC0 - 0xDF)
       // (0x80
       // - 0xBF),也可能在GB编码内
       continue;
      else
       break;
     } else if (0xE0 <= read && read <= 0xEF) {// 也有可能出错,但是几率较小
      read = bis.read();
      if (0x80 <= read && read <= 0xBF) {
       read = bis.read();
       if (0x80 <= read && read <= 0xBF) {
        charset = "UTF-8";
        break;
       } else
        break;
      } else
       break;
     }
    }
   }
   bis.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
  return charset;
 }


其中输入的是文件File,txt文件,然后输出编码格式,再以此编码格式来读取txt文件

public String txtToUTF8(File file)
    {
        String ret = ""; // 返回值
       
        if (!file.exists() || file.isDirectory())
        {
  // 不存在或存在却是一个目录
            return null;
        }

        // 获取编码情况
        String encoding = getFilecharset(file);

        try
        {
            StringBuffer sb = new StringBuffer();
            Reader reader = null;
            reader = new InputStreamReader(new FileInputStream(file), encoding);
            BufferedReader br = new BufferedReader(reader);
            String line = "";
            while ((line = br.readLine()) != null)
            {
                sb.append(line);
            }
            br.close();
            reader.close();
            ret = sb.toString();
        } catch (IOException e)
        {
            e.printStackTrace();
        }
        return ret;

    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值