JAVA 第十章

第十章

主要内容
  • File类

    • File对象主要用来获取文件本身的一些信息,不涉及对文件的读写操作。
    • 创建一个File对象的构造方法有3个:
      File(String filename);
      File(String directoryPath,String filename);
      File(File f, String filename);
      
  • 文件字节输入、输出流

    • java.io包提供了大量的流类,
    • Java
      • InputStream抽象类的子类创建的流对象称作字节输入流;
      • OutputStream抽象类的子类创建的流对象称作字节输出流
    • Java
      • Reader抽象类的子类创建的流对象称作字符输入流;
      • Writer抽象类的子类创建的流对象称作字符输出流。
    • 针对不同的源或目的地。java.io包为程序提供了相应的输入流或输出流。
    • 这些输入、输出流绝大部分都是InputStreamOutputStreamReaderWriter的子类。
  • 文件字符输入、输出流

    • Reader类提供的read方法以字符为单位顺序地读取源中的数据。
      int read()int read(char b[])int read(char b[], int off, int len)void close():
      long skip(long numBytes):
      
    • Writer流以字符为单位顺序地写文件,每次调用write方法就顺序地向目的地写入内容。 Writer类有如下常用的方法。
      void write(int n):  向输出流写入一个字符。
      void write(byte b[]):  向输出流写入一个字符数组。
      void write(byte b[],int off,int length):  从给定字符数组中起始于偏移量off处取len个字符写到输出流。
      void close():  关闭输出流。
      
  • 缓冲流

    • BufferedReader和BufferedWriter类创建的对象称作缓冲输入、输出流。二者的源和目的地必须是字符输入流和字符输出流。
    • 构造方法:
      BufferedReader(Reader in); 
      BufferedWriter (Writer out); 
      
    • BufferedReader和BufferedWriter类读写文件的方法:
      readLine() 读取文本行
      write(String s,int off,int len) 把字符串s写到文件中
      newLine(); 向文件写入一个回行符
      
  • 随机流

    • 使用RandomAccessFile类来创建一个随机访问文件流。RandomAccessFile类创建的流的指向既可以作为源也可以作为目的地。
    • 构造方法:
      RandomAccessFile(String name,String mode) ; 
      RandomAccessFile(File file,String mode) ;
      
    • 相关方法:
      seek(long a)  定位RandomAccessFile流的读写位置 
      getFilePointer() 获取流的当前读写位置  
      
  • 数组流

    • 字节数组流
      • 字节数组输入流ByteArrayInputStream和字节数组输出流ByteArrayOutputStream分别使用字节数组作为流的源和目标。
      • ByteArrayInputStream构造方法及常用方法
        ByteArrayInputStream(byte[] buf);
        ByteArrayInputStream(byte[] buf,int offset,int length);
        public int read();顺序地从源中读出一个字节 
        public int read(byte[] b,int off,int len);顺序地从源中读出参数len指定的字节数 
        ByteArrayOutputStream流构造方法及常用方法
        ByteArrayOutputStream();
        ByteArrayOutputStream(int size);
        public void write(int b); 顺序地向缓冲区写入一个字节  
        public void write(byte[] b,int off,int len); 将参数b中指定的len个字节顺序地写入缓冲区 
        public byte[] toByteArray(); 返回输出流写入到缓冲区的全部字节 
        
    • 字符数组
      • CharArrayReader和CharArrayWriter类是字符数组流,使用字符数组作为流的源和目标。例子10 向内存(输出流的缓冲区)写入字符串 。
  • 数据流

    • DataInputStream和DataOutputStream类创建的对象称为数据输入流和数据输出流。
    • 构造方法:
      DataInputStream(InputStream in)创建的数据输入流指向一个由参数in指定的底层输入流
      DataOutputStream(OutnputStream out)创建的数据输出流指向一个由参数out指定的底层输出流
      
  • 对象流

    • ObjectInputStream和ObjectOutputStream类创建的对象称为对象输入流和对象输出流。
    • 它的构造方法是:
      ObjectInputStream(InputStream in)
      ObjectOutputStream(OutputStream out)
      
    • 相关方法:
      writeObject(Object obj) 将一个对象obj写入到一个文件
      readObject() 读取一个对象到程序中 
      
    • 所谓序列化:一个类如果实现了Serializable接口,那么这个类创建的对象就是所谓序列化的对象。
  • 序列化与对象可隆

    • 如果一个“复制品”实体的变化不会引起原对象实体发生变化,反之亦然。这样的复制品称为原对象的一个克隆对象或简称克隆。
    • 一个对象调用clone()方法就可以获取该对象的克隆对象。
      对象输入流通过对象的序列化信息来得到当前对象的一个克隆。
  • 使用Scanner解析文件

    • 使用Scanner类和正则表达式来解析文件。
      • 使用默认分隔标记解析文件
        • 创建Scanner对象,并指向要解析的文件,例如:
          File file = new File("hello.java");
          Scanner sc = new Scanner(file); 
          sc将空白作为分隔标记 
          
    • 使用正则表达式作为分隔标记解析文件 :
      • 创建Scanner对象,指向要解析的文件,并使用useDelimiter方法指定正则表达式作为分隔标记,
  • 文件锁

    • FileLock、FileChannel类处理Java提供的文件锁功能。它们分别在java.nio和java.nio.channels包中。
    • 输入、输出流读写文件时可以使用文件锁。
    • RondomAccessFile创建的流在读写文件时使用文件锁的步骤如下:
      • 先使用RondomAccessFile流建立指向文件的流对象,该对象的读写属性必须是rw,例如:
        RandomAccessFile input=new 	       
        RandomAccessFile("Example.java","rw");
        
      • input流调用方法getChannel()获得一个连接到地层文件的FileChannel对象(信道),例如
        FileChannel channel=input.getChannel();
        
      • 信道调用tryLock()或lock()方法获得一个FileLock(文件锁)对象,这一过程也称作对文件加锁.
        例如:
        FileLock lock=channel.tryLock(); 
        
重点和难点
  • 重点:通过文件流读写数据,各种数据流的区别。掌握流的连接思想。

  • 难点:流的连接思想及各种数据流的使用。

总结
  • 掌握File类及各种方法的使用。

    • File对象主要用来获取文件本身的一些信息,不涉及对文件的读写操作。

    • 创建一个File对象的构造方法有3个:

      File(String filename);
      File(String directoryPath,String filename);
      File(File f, String filename);
      
    • File的各种方法

      public String getName() //获取文件的名字。
      public boolean canRead() //判断文件是否是可读的。
      public boolean canWrite() //判断文件是否可被写入。
      public boolean exits() //判断文件是否存在。
      public long length() //获取文件的长度(单位是字节)。
      public String getAbsolutePath() //获取文件的绝对路径。
      public String getParent() //获取文件的父目录。
      public boolean isFile() //判断文件是否是一个普通文件,而不是目录。
      public boolean isDirectroy() //判断文件是否是一个目录。
      public boolean isHidden() //判断文件是否是隐藏文件。
      public long lastModified() //获取文件最后修改的时间。
      
  • InputStream的子类创建的对象称为字节输入流,字节输入流按字节读取源的数据。

  • OutputStream的子类创建的对象称为字节输出流。字节输出流按字节将数据写入输出流指向的目的地。

  • Reader的子类创建的对象称为字符输入流,字符输入流按字符读取源中的数据。

  • Writer的子类创建的对象称为字符输出流。字符输出流按字符将数据写入输出流指向的目的地。

  • 使用对象流写入或读入对象时,要保证对象是序列化的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值