JAVA中的TXT四种存储格式判断

xiaoxiao2021-02-28  111

读取文件中方的的第一个字符”T”,转换成字节数组,前三个字节就可以判断TXT的存储格式,具体实现代码如下:

// 读取文件 public List<String> readFileByLines(String fileName) { List<String> list = new ArrayList<String>(); File file = new File(fileName); BufferedReader reader = null; InputStream inputStream = null; try { // 判断的文件输入流 inputStream = new FileInputStream(file); byte[] head = new byte[3]; inputStream.read(head); //判断TXT文件编码格式 if (head[0] == -1 && head[1] == -2 ){ //Unicode -1,-2,84 reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"Unicode")); }else if (head[0] == -2 && head[1] == -1 ){ //Unicode big endian -2,-1,0,84 reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-16")); }else if(head[0]==-17 && head[1]==-69 && head[2] ==-65) { //UTF-8 -17,-69,-65,84 reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8")); }else{ //ANSI 84 = T reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"gb2312")); } String tempString = null; int line = 1; while ((tempString = reader.readLine()) != null) { list.add(tempString); line++; } inputStream.close(); reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e1) { } } if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } return list; }

注意点:作为判断的文件输入流,不能作为输入字节流的参数,因为在判断的时候已经读取过数据了,再次使用将相当于使用不同的编码进行了拆分,会造成乱码,因此需要重新构建文件输入流作为输入字节流的参数

转载请注明原文地址: https://www.6miu.com/read-40770.html

最新回复(0)