API-File类型,IO流,字节流,缓冲流,数据输出流

=============================================
File类型
   java.io.File类型,可以对硬盘上的文件以及目录,进行操作。
      如查看文件/目录的属性信息,创建,删除文件/目录。此类型
      不能查看和修改文件里的内容。
常用构造器: 
   File(String pathname):
            指定一个路径,创建一个File对象 
      
            路径:
            (1)文件的路径,要写到文件的扩展名为止
            (2)目录的路径,要写到当前目录的名称为止          
     
一、概念
       可以用来创建,删除文件/目录,还可以查看文件/目录的属性信息。
      但是不可以修改文件里的数据。如果需要修改,应该使用输入/输出流。
二、常用构造器
    File(String pathname)
        创建一个指定路径的File对象
    File(File parent,String child)
       在指定parent路径下,创建一个child的file对象
    File(String parent,String child)
       在指定parent路径下,创建一个child的file对象
    
三、
       绝对路径:是从根目录开始写的路径
          window: 从盘符开始书写:
                  D:\a\f1.txt
                  D:\a\b
          linux:  /home/scott/f1.txt
                  /home/scott        
       相对路径: 相对某一文件/目录的路径,不是从根路径书写。
          reg: f2.txt相对于a目录的路径:
          window:    b\f2.txt
          linux:     b/f2.txt
          reg: f3.txt相对于f2.txt的路径
                  ../c/f3.txt
                          
             
              
四、常用方法 
    boolean exists();判断指定的路径是否存在
    boolean isFile();判断指定路径是不是文件
    boolean isDirectory();判断指定路径是不是目录
    String getName());获取文件/目录名称
    long lastModified();获取文件/目录的最后修改时间
    boolean isAbsolute();判断指定路径是不是绝对路径
    String getAbsolutePath();获取绝对路径
    String getParent();获取父目录的路径
    long length();获取文件大小   
    
    文件/目录创建方法:
    boolean createNewFile();创建文件
    boolean mkdir();创建目录
    boolean mkdirs();创建多级目录
    文件/目录的删除方法
    boolean delete()
           可以删除文件,删除目录时,需要目录下没有文件或子目录
    File[] listFiles()
        获取目录里的file对象

递归:
        递归思想:分成递与归。一层层递进,最后再一层层归。
    两种递归:
      (1) 方法调用自己   
      (2)  方法A调用方法B,方法B调用A
  举例:
     n*(n-1)*......*1                      
     
     z = f(n) 计算n的阶乘
       = n*f(n-1)
       = n*(n-1)*f(n-2)
       = n*(n-1)*......*1
       
       f(n)是一个函数:
               里的逻辑:
                n*f(n-1)
练习:
      斐波那契数列:  第n个数是第n-1个数与第n-2个数的和。
      
      1,1,2,3,5,8,13,.......
      
      计算第10个数的值。

===============================================
IO流:(Input,Output)
    我们在做项目时,除了自定义的一些数据外,还可能需要从"外界"
    引入数据,或者将数据导出到"外界"。这时,我们需要I/O操作。
     外界:指的可能是  键盘,显示器,硬盘,另外一个程序。
  输入:又叫读入操作
           数据时从"外界"流向程序
  输出:又叫写出操作
           数据时从程序流向"外界"

  流: 就是数据序列, 一经创建成功,就会打开一个通道。所以使用完
       应该进行关闭操作。
IO流的分类:
   (1)按照流向分类:
           输入流
           输出流
   (2)按照处理的数据单位分类:
                字节流
                字符流
   (3)按照功能分类:
                节点流:直接连接两个设备的流类型
                处理流:对节点流再次封装与处理的流类型
======================================
字节流:
       抽象父类 InputStream/OutputStream
文件字节流:
    FileInputStream/FileOutputStream
  
   (1)构造器:
        FileInputStream(File file) 
                创建一个指定路径的File对象的文件输入流对象
        FileInputStream(String name) 
                创建一个指定路径的字符串的文件输入流对象
        常用方法:
    int read()
                 读取该流中的一个字节数据,即8位二进制,存储到一个int数
                 据的低八位上              
                 如果返回-1,读至文件末尾,
       long skip(long n)
               跳过流中n个字节
    int read(byte[] b)
                读取字节存入byte数组中,最多能读b.length个字节
                返回的是实际读取的字节个数
    int available()
                查看此输入流中剩余的字节数量
                
    (2)构造器
       FileOutputStream(File file) 
       FileOutputStream(File file, boolean append) 
       FileOutputStream(String name)
       FileOutputStream(String name, boolean append)
             创建一个指定路径的输出流对象,append表示在文件末尾追加
        
       PS:如果指定路径下的文件名不存在,会自动创建。
                    如果父路径不存在,则报异常FileNotFoundException
             常用方法:
       void write(int b)
                   写出参数b中的一个字节,int类型的低八位。
       void write(byte[] b)
                   将字节数组b中的字节按顺序写出
       void write(byte[] b,int off,int len)
                  将字节数组b中的字节按顺序写出,从下标off,写len个  

File:可以创建,删除,查看文件/目录的信息。但是不
            能查看/修改文件里的内容
删除目录时:需要注意使用递归思想(不能直接删除不为空的目录)
IO流:
       用途,传输数据。
       输入:读取数据
       输出: 写出数据
       流:数据序列
分类:
   (1)按照流向分类
   (2)按照处理的单位分类
   (3)按照功能分类
字节流:
      抽象父类:
   InputStream:定义了字节输入流的常用方法
       int available()
       void close();
       int read():读取一个字节,存入int的低八位上,范围是0-255
       int read(byte[] b):
                                    读取字节存入字节数组b中,返回的是读取的有效字节个数。
       int read(byte[] b,int off,int len)
       skip(int n);
   OutputStream:定义了字节输出流的常用方法
       void close();
       void flush();//冲刷,作用是将流的数据,冲刷进文件中
       void write(int b);写一个字节
       void write(byte[] b);写一个字节数组
       void write(byte[] b,int off,int len)
子类:
    FileInputStream/FileOutputStream
       继承了字节流的抽象父类。重写了方法,并且提供了自己独有的方法
       构造器:
       FileInputStream(File file)
       FileInputStream(String path)
    
       FileOutputStream(File file)
       FileOutputStream(File file,boolean append)
       FileOutputStream(String pathname)
       FileOutputStream(String pathname,boolean append)
      
       PS:所有的输出流,对于指定的路径中的文件若是不存在,
                    都会自动创建。
===================================================
缓冲流:
    BufferedOutputStream:字节缓冲输出流
        在写数据时,如果一个字节一个字节的写,写的次数明显很多,效率就会变得很低。
        如何提高效率呢。
        缓冲输出流的特点是:在流里维护了一个缓冲区,写字节时,先将字节
        写入缓冲区, 当缓冲区满时,再一次性的将数据写到文件里。这样就
        降低了写的次数,因此提高了效率。
    
        因此缓冲输出流缺失即时性,可以使用flush方法进行冲刷
    
        常用构造器:
        BufferedOutputStream(OutputStream out)
                创建一个指定字节输出流的缓冲流对象
        BufferedOutputStream(OutputStream out,int size)
                创建一个指定字节输出流的缓冲流对象,并设置缓冲区的大小
        PS:当一次写的字节超出缓冲区大小,会出现溢出情况,溢出的字节
                      会先写出到文件中    
         
         常用方法:
        void write(int b):
                        写int数据的低八位,写入缓冲区内
        void write(byte[] b,int off,int len)
                        写指定长度len的字节数组,写入缓冲区  
                        
                        
                        
                        
    BufferedInputStream:字节缓冲输入流
       在读取字节时,也是一个字节一个字节的读,次数多,效率低。
       使用缓冲输入流,内部维护了一个缓冲区,默认8k,先一次性将缓冲区装满
       等待读取.
       当将缓冲区的数据读完,缓冲区再次存储后续数据。读取的次数明显降低
        效率高      
     
       构造器:
       BufferedInputStream(InputStream is);
       BufferedInputStream(InputStream is,int size);
    常用方法:
       int read(byte[] bs)
              读取缓冲区里的字节存储bs中,
              当一次性得去的字节小于缓冲区,我们是从缓冲区里读数据。
              此时,效率高  
                     
              当一次性读取的字节超出缓冲区大小。
              不使用缓冲区,直接从文件里读。
        
       int read(byte[] bs,int off,int len)             
================================================
数据字节流,与缓冲流一样,父类都是过滤字节流(
     FilterOutputStream/FilterInputStream    
         )
    这两个类提供了几个特殊的方法,可以直接写基本数据类型


数据输出流:DataOutputStream
    构造器:
    DataOutputStream(OutputStream os)
        创建一个指定字节输出流的数据输出流对象
   
     常用方法:
            除了提供写一个字节和写一个字节数组的方法外,还提供了如下方法      
      writeByte(int b)
      writeShort(int s) 
      writeInt(int i)
      writeLong(long l)
      writeFloat(float f)
      writeDouble(double d);
      writeChar(int c);
      writeBoolean(boolean b)
      writeUTF(String s);

猜你喜欢

转载自blog.csdn.net/qq_42397691/article/details/82026479