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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值