content: package cn.tybblog.touchfish.util;
  
  import java.io.BufferedInputStream;
  import java.io.FileInputStream;
  
  /**
   * @author ly
   */
  public class FileCode {
      public static String codeString(String fileName) throws Exception {
          String charset = "GBK";
          byte[] first3Bytes = new byte[3];
          try {
              boolean checked = false;
              BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileName));
              bis.mark(0);
              int read = bis.read(first3Bytes, 0, 3);
              if (read == -1) {
                  bis.close();
                  return charset;
              } else 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;
              }
              bis.reset();
              if (!checked) {
                  while ((read = bis.read()) != -1) {
                      if (read >= 0xF0) {
                          break;
                      }
                      if (0x80 <= read && read <= 0xBF) {
                          break;
                      }
                      if (0xC0 <= read && read <= 0xDF) {
                          read = bis.read();
                          if (0x80 <= read && read <= 0xBF) {
                              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;
      }
  }
  