I/O

1.1  流
输入流:可以从其中读入一个字节序列的对象 
输出流:可以向其中写入一个字节序列的对象
这些字节序列的来源地和目的地可以是文件,网络连接,内存块  
抽象类java.io.InputStream 和java.io.OutputStream 构成了有层次结构的输入输出类的基础


由于Unicode中每个字符都使用了多个字节来表示,所以面向字节的流不便于处理以Unicode形式存储的信息。
所以抽象类 java.io.Reader 和java.io.Writer的子类专门用于处理Unicode字符的类构成了一个单独的层次结构。
这些类拥有的读写操作都是基于两字节的Unicode码元的,而不是基于单字节的字符


 //关闭一个输出流的同时也就是在清空用于该输出流的缓冲区:所有被临时置于缓冲区中以便用更大的包的形式传递的字符在关闭输出流是都将被送出。   还可以使用flush()方法人为的清空这些输出


java.io.InputStream                               java.io.OutputStream
  -ByteArrayInputStream                                -ByteArrayOutputStream
  -FileInputStream                                     -FileInputOutputStream 
  -FilterInputStream                                   -FilterInputOutputStream
  -ObjectInputStream                                   -ObjectInputOutputStream 
  -PipedInputStream                                    -PipedInputOutputStream
  -StringBufferInputStream                              
  -SequenceInputStream        
 抽象类的方法:
 available()                                             close()
 close()                                                 flush()--清空输出流,即将所有缓冲的数据发送到目的地
 mark() reset()  markSupported()                         write()
 skip()
 read()


流家族:处理字节和处理字符两个单独的层次结构。
读写字符串和数字:DataInputStream 和 DataOutputStream 可以以二进制格式读写所有的基本java类型
 DataInputStream实现了DataInput接口和Closeable接口 
 DataOutputStream实现了DataOutput接口和Closeable接口和 Flushable  


4个接口 :  Closeable        close()  
           Flushable         flush()
           Readable          read(charBuffer  cb)  字符处理专用
           Appendable        append(char  c)    append(charSequence)添加单个字符和字符序列
 
组合流过滤器:FilterInputStream  和  FileInputOutputStream  
             可以提供附着在一个磁盘文件上的输入流和输出流,而你只需要向其构造器提供文件名或文件的完整路径名
java中使用装饰器模式:1.DataInputStream   dis=new DataInputStream(new FilterInputStream("zhang.txt"));
                      dis.readDouble();             
                    2. DataInputStream   dis=new DataInputStream(
                                             new   BufferedInputStream(
                                             new  FilterInputStream("zhang.txt")))  
                       dis.readDouble();




1.2  文本输入和输出  
InputStreamReader  类将包含字节的输入流转换为可以产生Unicode字符的读入器。子类是FileReader
OutputStreamWriter  类将使用选定的字符编码方式,把Unicode字符流转换为字节流。子类是FileWriter 
FileReader和FileWriter这两个类是附着在文件上面的读入器和写出器。
FileWriter  是  FileOutputStream的进步        FileReader是  FileInputStream的进步
即 FileWriter fw=new FileWriter("zhang.txt")==FileWriter fw=new FileWriter(new FileOutputStream("zhang.txt")) 
 
写出文本输出:PrintWriter 这个类拥有以文本格式打印字符串和数字的方法,还有一个将PrintWriter链接到FileWriter的方法
            PrintWriter pw=new PrintWriter("zz.txt")==PrintWriter pw=new PrintWriter(new FileWriter("zz.txt"))


读入文本输入:BufferedReader  in  =new BufferedReader(new FileReader("zz.txt"));
             while((line=in.readLine())!=null{ do with  line; }
             但是BufferedReader  没有任何用于读入数字的方法,建议使用Scanner来读入文本输入


字符集:建立了两字节Unicode码元序列与使用本地字符编码方式的字节序列之间的映射。
       java.nio包用引入的Charset类统一了对字符集的转换。
       Charset   c=Charset.forName("ISO-8859-1");




1.3   读写二进制数据
DataOutput  : writeChars,writeByte,writeInt,writeShort,writeLong,writeFloat,writeDouble,writeChar,writeBoolean
DataInput   :           readByte,readInt,readShort,readLong,readFloat,readDouble,readChar,readBoolean,


DataInputStream 实现了DataInput    DataInputStream  ds=new DataInputStream (new FileInputStream("a.txt"));
DataOutputStream 实现了DataOutput  DataOutputStream do=new DataOutputStream (new FileInputStream("a.txt"));


随机访问文件:RandomAccessFile类可以在文件中的任何位置查找或写入数据。(实现了Closeable,DataOutput,DataInput接口)
             随机访问文件有一个表示下一个将被读或写出的字节所处位置的文件指针,
             seek方法可以将这个文件指针设置到文件内部的任意字节位置




1.4   ZIP文档  P30-P32
ZIP文档 以压缩格式存储了一个或多个文件,每个ZIP文档都有一个包含注入文件名字和所使用的压缩方法等信息的头。
ZIPInputStream 来读入ZIP文档 ,使用getNextEntry返回一个描述文档中每个单独项的ZIPEntry类型的对象。
                              read方法被修改为在碰到当前项的结尾时返回-1,然后必须调用closeEntry来读入下一项
ZIPInputStream   zin=new  ZIPInputStream (new FileInputStream("zipname.zip"));
   ZIPEntry    entry;
   while ((entry=zin.getNextEntry)!=-1)
   { analyze  entry;
     read   ;-1
     zin.closeEntry;
   }
   zin.close();


ZIPOutputStream 把文件写入一个ZIP文档。对每一个文件都创建一个ZIPEntry对象,并将文件名传递给ZIPEntry的构造器。
                                     利用ZIPOutputStream 的putNextEntry方法把一个ZIPEntry对象写入zip中,
                                      调用closeEntry。 对每一个文件都这么做。
FileOutputStream   fout=new  FileOutputStream("text.zip");
ZIPOutputStream    zout=new ZIPOutputStream (fout);
for all file
{
 ZIPEntry  ze=new  ZIPEntry(filename);
 zout.putNextEntry(ze);
 zout.closeEntry();
}    
zout.close();


JAR文件只是带有清单的ZIP文件,利用JARInputStream和JAROutputStream来读写清单文件。




1.5    对象流与序列化
第一种情况:对象和对象之间没有互相引用
 1.为了保存对象数据,首先需要打开一个ObjectOutputStream对象
  ObjectOutputStream    out=new ObjectOutputStream(new FileOutputStream("employee.txt"));
 2.为了保存对象,使用ObjectOutputStream的writeObject方法
   Employee  harry=new Employee("zzz",111,2000,1,1);
   Manager   boss=new  Manager("qqqq",2222,1999,1,1);
   out.writeObject(harry);   
   out.writeObject(boss);   
 3.为了将这些对象读回,首先需要获得一个ObjectInputStream对象
   ObjectInputStream   in=new ObjectInputStream(new FileOutputStream("employee.txt"));
 4.按照对象被写出的顺序获得他们
  Employee   e1=in.readObject();
  Employee   e2=in.readObject();
 5.序列化的前提    :这个类必须实现Serializable接口


第二种情况:对象与对象之间有互相引用(对象里面有一个对象域)
  解决方法:每个对象都是用一个序列号保存的。




1.6   文件管理
File类封装了在用户机器上处理文件系统所需的所有功能。File类的对象表示一个文件或者目录
构造器:  File  f=new File("E;\\a.txt");
         File  ff=new File(String path,String name);在由path参数指定的目录中创建具有给定名字的File对象
         File  fff=new File(File dir,String name);  在目录dir中创建一个File对象


方法  :createNewFile  在具有指定文件名的文件不存在的情况下创建文件,并且返回一个boolean值。
        mkdir          在指定目录不存在时,该方法可以创建该目录
        exist          告知具有这个文件名的文件是否存在
        isDirectory  
        isFile
        list           列出该目录下所有的文件        
        deleteOnExit   请求在虚拟机关闭时将文件删除




1.7    新I/O  java.nio包
对下列特性的支持:   1、字符集编码和解码器
                    2、非阻塞的I/O
                     3、内存映射文件
                      4、文件加锁机制


1.8    正则表达式 P67-P69
regular expression :用于指定字符串的模式。可以在任何需要定位匹配某种特定模式的字符串的情况下使用正则表达式。
字符类:是一个括在括号中的可选择的字符集。[Jj],[0-9],[A-Za-z]
预定的字符类:\d(数字)  \p{Sc}(Unicode货币符号)
使用\作为转义字符 
^和$分别匹配一行的开头和结尾
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值