File(文件)类

File类用于封装一个路径,该路径可以是从系统盘符开始的绝对路径,也可以是相对于当前目录而言的相对路径

File类内部封装的路径可以指向一个文件,也可以指向一个目录,在使用File类操作文件或者目录之前,首先得创建一个File对象。





创建File对象


1.File f=new File("c:\\abc\a.txt");//将a.txt封装成FIle对象,可以将已有的和未出现的文件或者文件夹封装成对象。


2.File f=new File("c:\\abc","a.txt"); 第一个参数代表的是目录,第二个参数代表的是目录下的文件。


3.file d=new File("c\\abc"); 将路径封装成对象


    File f=new File(d,"a.txt"); 调用路径对象

    f代表的是文件路径,目录分隔符:




构造方法

    File(String pathname)              创建一个指定文件或目录路径的File对象


    File(File file, String fileName)  创建一个由File对象和指定文件名表示的File对象


    File(String filePath, String fileName)   创建一个指定文件目录路径和文件名的File对象




File类的常用方法

1.创建


    boolean createNewFile(): 在指定位置创建文件,如果该文件已经存在,则不创建,返回false


和写入流不一样,写入流创建文件会覆盖已经存在的文件。

    File f=new File("a.txt");

    f.createNewFile();


    创建一级目录 


    File dir=new File("abc");

    dir.mkdir();


    创建多级目录


    dir.mkdirs();



2.删除


删除失败,返回false,可能不能删除

在程序退出时,删除指定文件。必须删除。不会失败


3.判断 :在判断文件对象是都是文件或者目录的时候,必须要先判断该文件对象封装的内容是否存在。


    boolean canRead() 判断文件是否可读,可读则返回真,否则返回假


    boolean canWrite() 判断文件是否可写,可写则返回真,否则返回假


    boolean exists() 判断文件是否是指定路径中的文件或目录,是则返回真,否则返回假

    boolean isFile() 判断File的对象是否是文件,是则返回真,否则返回假

    boolean isDirectory() 判断File的对象是否是目录,是则返回真,否则返回假


    boolean isAbsolutePath() 判断File的对象是否是一个文件或目录的绝对路径,是则返回真,否则返回假


    File f=new File("a.txt");

    f.canExecute(); 是否能执行。


    f.exits();返回boolean 文件是否存在

    是否是目录 


    f.isDirectory();


    是否是文件


    f.isFile();


    是否是隐藏的


    f.isHidden();

    是否是绝对路径


    f.isAbsolute();




4.获取信息。


   getName()   //获取名称


   getpath()    //获取路径


   getAbsolutePath() //获取绝对路径 


   getParent() //获取绝对路径下的父路径,如果获取的是相对路径返回null,如果相对路径中由上一级目录,该目录就是结果。


   lastModified()//获取最后一次修改时间


   length();//获取体积大小

获取文件父目录名字。如果没有指明父目录返回null

返回路径名的哈希码


获取文件最近一次修改时间(单位毫秒)


5.其他

   renameTo();改名,重命名,如果修改路径的话,同时路径也会修改


   f1.renameTo(f2);


   listRoots();返回 File 数组,列出可用的文件系统根(盘符)


例子:

    File[] files=File.listRoots();


        for(File f: files) {


            sop(f)


        }

    list():返回当前目录下所有文件,包括子目录

    File f=new File("abc");


    String[] namess=f.list();//调用list方法的file对象必须封装了一个目录,把那个目录必须存在


    for(String f: names) {


        sop(f)

    }

    //显示.bmp结尾的文件


    list(FilenameFilter Filter) 返回String[]  指定目录中满足制定过滤器的文件和目录

    File dir=new File("abc");

     String[] namess=f.list(new FilenameFileter()

          public boolean accept(File dir,String name) {


              return name.endsWith(".bmp");


          }


     );


     for(String f: names) {


          sop(f);


     }

     //listFiles();返回当前路径下的文件对象。(不包括子目录)  

     FIle dir=new File("c:\\"); 


     File[] files=dir.listFiles();


     for(File f : files) {

         sop (f.getname())


     }



遍历目录下的文件

    如果希望获取指定类型的文件,可以使用重载的list(FilenameFilter)方法。


list(FilenameFilter filter)方法的工作原理:


    1、调用list()方法传入FilenameFilter文件过滤器对象

    2、取出当前File对象所代表目录下的所有子目录和文件

    3、对于每一个子目录或文件,都会调用文件过滤器对象的accept(File dir,String name)方法,并把代表当前目录的File对象以及这个子目录或文件的名字作为参数dir和name传递给方法


    4、如果accept()方法返回true,就将当前遍历的这个子目录或文件添加到数组中,如果返回false,则不添加。





列出指定目录下所有内容:使用递归 。。函数自己调用自己


    File dir=new File("d:\\");

    sop(dir);

    File[]  files=dir.listFiles();

    for(int x=0;x<files.length;x++) {

        if(files[x].isDirectory)

           showDir(files[x]);


        else


            System.out.println(files[x]);

      }



将一个指定目录下的jva文件的绝对路径,存储到一个文本文件中。


思路:


    1.对指定目录进行递归


    2.获取递归过程中所有以JAVA文件的路径

    3.将这些目录存储到集合中,将集合中的数据写入到一个文件中。





删除文件及目录

    File类提供了delete()方法删除文件,但该方法无法删除目录,因此,要想删除文件及目录,需要通过递归的方式将整个目录以及其中的文件全部删除。

删除一个带内容的目录

原理:从里面往外删除,就需要递归

    File dir=new File("d:\\");


    File[] files=dr.listFiles();


    for(int x=0;x<files.length;x++) {

        if(files[x].isDirectory())

            removeDir(files[x]);


            sop(files[x].toString()+":-file-:"+files[x].delete(););

    }


    sop(dir+":-dir-:"+dir.delete();)





RandomAccessFile


    RandomAccesseFile不属于流类,但具有读写文件数据的功能,可以随机地从文件的任何位置开始执行读写数据的操作



    RandomAccessFile可以将文件以只读或者读写的方式打开,具体使用哪种方式取决于创建它所采用的构造方法

    RandonAccessFile(String file,string mode)参数file指定被访问的文件

    RandonAccessFile(String name,string mode)参数name指定被访问文件的路径



mode的具体值

    r 以只读方式打开。调用该对象的任何write方法都会导致抛出IOException异常

    rw 打开以便读取和写入,若该文件不存在则尝试创建

    rws 打开以便读取和写入,与rw不同的是还要求对文件的内容的每个更新都同步写入到基础存储设备中去

    rwd 打开以便读取和写入,与rw不同的是还要求对文件内容的每个更新都同步写入到基础存储设备中去

    RandomAccessFile类针对文件的随机访问操作,提供了一些用于定位文件位置的方法

    long getFilePointer() 返回当前读写指针所处的位置

    void seek(long pos) 设定读写指针的位置,与文件开头相隔pos个字节数

    int skipBytes(int n) 使读写指针从当前文职开始,跳过n个字节

    void setLength(long newLength) 设置此文件的长度