文本处理

1.编码
ascii码: ASCII是最初的计算机指定的一套符号编码,使用一个字节其中的7位,128个数值代表不同字符,对于英语这个已经是足够。
unicode编码:unicode编码 是一种规范,规定使用数字来映射字符 unicode只是一个符号集,只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储,即编码方式 UTF-8,UTF-16,UTF-32 其实是 Unicode 规范的一种实现方案。
UTF-8编码: UTF-8 ASCII 的一个超集, 对于 0x00-0x7F 之间的字符, UTF-8 编码与 ASCII 编码完全相同, 汉字在 0x0800-0xFFFF 之间,所有 UTF-8 使用三个字节表示汉字。
GB2312编码: 一共收录了 7445 个字符,包括 6763 个汉字和 682 个其它符号。 GB2312 支持的汉字太少。 1995 年的汉字扩展规范 GBK1.0 收录了 21886 个符号 ,它分为汉字区和图形符号区。汉字区包括 21003 个字符。 2000 年的 GB18030 是取代 GBK1.0 的正式国家标准。该标准收录了 27484 个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的 PC 平台必须支持 GB18030 ,对嵌入式产品暂不作要求。所以手机、 MP3 一般只支持 GB2312 ASCII GB2312 GBK GB18030 ,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为 0 。按照程序员的称呼, GB2312 GBK GB18030 都属于双字节字符集  (DBCS)
GBK:  汉字国标扩展码 , 基本上采用了原来 GB2312-80 所有的汉字及码位,并涵盖了原 Unicode 中所有的汉字 20902 ,总共收录了 883 个符号,  21003 个汉字及提供了 1894 个造字码位。由于 GBK 同时也涵盖了 Unicode 所有 CJK 汉字,所以也可以和 Unicode 做一一对应。

我们常用的记事本功能,在"save as"的时候,可以选择不同的编码方式,里面有四个选择:ansi,unicode,unicode big endian,utf-8:
1.ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码)。
2.Unicode编码指的是UCS-2编码方式,即直接用两个字节存入字符的Unicode码。这个选项用的little endian格式。
3.Unicode big endian编码与上一个选项相对应。我在下一节会解释little endian和big endian的涵义。
4.UTF-8编码,也就是上一节谈到的编码方法。

2.输入输出流

Java中I/O操作主要是指使用Java进行输入,输出操作.  Java所有的I/O机制都是基于数据流进行输入输出, Java.io是大多数面向数据流的输入/输出类的主要软件包。 此外,Java也对块传输提供支持,在核心库 java.nio中采用的便是块IO。 流IO的好处是简单易用,缺点是效率较低。块IO效率很高,但编程比较复杂。
将数据冲外存中读取到内存中的称为输入流,将数据从内存写入外存中的称为输出流。
流序列中的数据既可以是未经加工的原始二进制数据,也可以是经一定编码处理后符合某种格式规定的特定数据。因此Java中的流分为两种:
 1)  字节流: 数据流中最小的数据单元是字节
 2)  字符流: 数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。
 InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。
Reader(文件格式操作):抽象类,基于字符的输入操作。
RandomAccessFile(随机文件操作):它的功能丰富, 可以从文件的任意位置进行存取(输入输出)操作
结束的判断:方法read()的返回值为-1时;readLine()的返回值为null时。

BufferedInputStream:当向缓冲流写入数据时候,数据先写到缓冲区,待缓冲区写满后,系统一次性将数据发送给输出设备。
BufferReader : 接受Reader对象作为参数,并对其添加字符缓冲器,使用readline()方法可以读取一行。

3.读取文件
public   static   void   readTxtFile(String filePath){
         try  {
                 String encoding= "GBK" ;
                 File file= new  File(filePath);
                 if (file.isFile() && file.exists()){  //判断文件是否存在
                     InputStreamReader read =  new  InputStreamReader(
                     new  FileInputStream(file),encoding); //考虑到编码格式
                     BufferedReader bufferedReader =  new  BufferedReader(read);
                     String lineTxt =  null ;
                     while ((lineTxt = bufferedReader.readLine()) !=  null ){
                         System.out.println(lineTxt);
                     }
                     read.close();
         } else {
             System.out.println( "找不到指定的文件" );
         }
         }  catch  (Exception e) {
             System.out.println( "读取文件内容出错" );
             e.printStackTrace();
         }
     
     }
文件流转String
public static String inputStreamToString(InputStream inputStream)throws IOException{
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] data = new byte[2048];
        int count = 0;
        while((count=inputStream.read(data))!=-1){
            outStream.write(data,0,count);
        }
        String result = new String(outStream.toByteArray(),"utf-8");
        outStream.close();
        return result;
    }

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值