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

来源:互联网 发布:第一版主网小说网网络 编辑:程序博客网 时间:2024/05/16 19:30

读取文件中方的的第一个字符”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;    }

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

原创粉丝点击