import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.InputStreamReader; public class FileUtils { //读取文本文件中的内容 public static String readTxtFile(String strFilePath) { String path = strFilePath; String content = ""; //文件内容字符串 //打开文件 File file = new File(path); //如果path是传递过来的参数,可以做一个非目录的判断 if (!file.isDirectory()) { try { InputStream is = new FileInputStream(file); if (is != null) { InputStreamReader inputReader = new InputStreamReader(is, getCharset(file)); BufferedReader bufferReader = new BufferedReader(inputReader); String line; //分行读取 while ((line = bufferReader.readLine()) != null) { content += line + "\n"; } is.close(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } return content; } public static String getCharset(File file) { String charset = "GBK"; byte[] first3Bytes = new byte[3]; try { boolean checked = false; BufferedInputStream bis = new BufferedInputStream( new FileInputStream(file)); bis.mark(0); int read = bis.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; } bis.reset(); if (!checked) { int loc = 0; while ((read = bis.read()) != -1) { loc++; if (read >= 0xF0) break; //单独出现BF以下的,也算是GBK if (0x80 <= read && read <= 0xBF) 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; } } System.out.println(loc + " " + Integer.toHexString(read)); } bis.close(); } catch (Exception e) { e.printStackTrace(); } return charset; } }
Android 读取文件内容工具类
最新推荐文章于 2023-06-11 15:58:03 发布