天天看点

黑马程序员--File类对象

 ------- <a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">android培训</a>、<a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">java培训</a>、期待与您交流! ----------

File类用来将文件或文件夹封装成对象,实现对文件与文件夹进行操作。进一步弥补流对象对文件操作与对文件夹操作的局限,具体体现在File类,实现了对包括文件和文件夹包括创建、删除、判断、获取信息等的操作,。而流不具备对文件属性操作的方法,且无法对文件夹进行操作。

    File对象,是文件和目录的抽象表现形式,例如: File f=new File("c:\\abc\\a.txt");

    File类对象的常用属性和方法:

    1.常用属性  static String separator----与系统有关的默认分隔符(实现分隔符的跨平台,在不同平台下表现为不同的分隔符,比如在WIndows操作系统下的分隔符是"\",而Unix的是"/" ),那么在Windows下File.separator就表示为“\”,而在Unix操作系统下表现为“/”。当一个软件涉及到与系统平台相关的分隔符,或者说一款软件包含系统相关分隔符,同时有跨平台需求,就可以使用static String separator。

例如下面的代码:

class FileDemo

{

   public static void main(String [] args)

    {

       consMethod();

    }

    public static void consMethod()

    {

        File f1=new File("c:\\abc\\zzz\\a.txt");

        File f2=new File("c:"+Flie.separator+"abc"+Flie.separator+"zzz"+Flie.separator+"a.txt");

       //f2对象除了盘符c:的因素外,便可在多个平台间运行。

        System.out.println("f1:"+f1);

        System.out.println("f2:"+f2);

    }

}

    2.常用方法  方法主要包括对文件和文件夹的创建、删除、判断、获取信息四个主要方面。

        1)创建

            boolean  createNewFile():在指定位置上创建文件,如果指定路径上无同名文件则创建此文件,并返回ture。如果该文件已经存在,则不创建,返回false。和输出流不一样,输出流对象一旦建立创建文件,如果指定目录下有同名文件存在,也会被覆盖(相当于删除原来指定目录下的同名文件,再创建一个同名文件,来接收输出流数据,原同名被删除的文件数据不保留!)。

           例如:    

            File f=new File("c:\\abc\\a.txt");               

            f.createNewFile();  //通过File类的createNewFile方法创建一个文件。a.txt即为c盘下的abc目录下的文本文件“a.txt”   此方法抛出throwsIOException异常

            boolean mkdir():创建文件夹(只能创建一级,不能创建多级文件夹)。

            void mkdirs:创建多级文件夹。

            例如:

                   File f=new File("c:\\abc\\dldf\\dgfe\afg");   

                   f.mkdir();//创建不成功,但能编译和运行通过。

                   f.mkdirs();//可以创建多级目录,弥补mkdir()的局限性。

        2)删除

            boolean delete():删除失败返回false.

            void deleteOnExit();在程序退出时删除指定文件。该方法是对delete()的进一步优化,试想两种情况:1、当一个文件同时被当前程序和别的程序占用时,当本程序执行delete()时,会因其他程序对该文件的占用而使delete()执行失败,而该文件本是该用完就可以被删除的垃圾程序,因为本次执行失败而使垃圾文件占据内存空间未被删除……;2、程序在过程中发生异常而终止,而后续的程序代码包含delete()语句需执行对垃圾文件的删除指令,因异常同样被终止,没有执行到。这两种情况都制约了delete的执行。而deleteOnEixt()的意思是,在当虚拟机退出前,执行该语句。删除指定垃圾、或临时文件。

        3)判断

            boolean exists()://判断文件是否存在。

            isFile();//判断表示的文件是否是一个标准文件。

            isDirectory();//判断表示的文件是否是一个目录。

            需注意:一下代码返回的都为false

            public static void method_1()throws IOException

            {

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

                //f.createNewFile();//去掉本行前面的第一个注释,f.isFile返回ture.

               //f.mkdir;                  //去掉本行前面的第一个注释,f.isDirectory返回ture.

                f.isDirectory();           //返回false

                f.isFile();                    //返回false

            }

            isHidden();//判断指定的文件是否是一个隐藏文件。

            isAbsolute();//判断是否为绝对路径名。

        4)获取信息

           getName();//获取路径名表示的文件或目录的名称。

           getPath();//如果获取到的是相对路径,则返回的是相对路径,如果获取到的是绝对路径则返回的是绝对路径。

           getParent();//该方法返回的是绝对路径中的父目录。如果获取的是相对路径,则返回的是最底层文件或文件夹的上一层目录,如果获取的只是本层单级文件或文件夹,返回null。

           getAbsolutePath();//该方法获取绝对路径,不管文件或文件夹是否被创建,该方法只从File类封装的对象中获取路径,不需要像isFile()和isDirectory()一样,要先判断是否存在文件或文件夹被成功创建(exists())

           long lastModified();获取文件最后一次被修改的时间。

           long length();获取文件的大小

           String []   list(FilenameFilter filter);//返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。-----------简单点讲就是文件和目录按filter条件进行过滤的筛选器

           例如:

import java.io.*;

class fileDemo

{

     public static void main(String[] args)throws IOException

     {

            dirmk();

     }

     public static void dirmk()throws IOException

     {

          File f=new File("abc\\adfa\\dfa");

          f.mkdirs();

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

          f1.createNewFile();

          File f2=new File(f,"b.txt");

          f2.createNewFile();

          File f3=new File(f,"c.txt");

          f3.createNewFile();

          File f4=new File(f,"d.txt");

          f4.createNewFile();

          File f5=new File(f,"e.txt");

          f5.createNewFile();

          File f6=new File(f,"f.txt");

          f6.createNewFile();

          File f7=new File(f,"g.txt");

          f7.createNewFile();

          File f8=new File(f,"g.java");

          f8.createNewFile();

          File f9=new File(f,"r.java");

          f9.createNewFile();

          File f10=new File(f,"t.java");

          f10.createNewFile();

          File f11=new File(f,"h.java");

          f11.createNewFile();

          File f12=new File(f,"j.java");

          f12.createNewFile();

          File f13=new File(f,"dd.java");

          f13.createNewFile();

         String [] arr=f.list(new FilenameFilter ()

         {

              public boolean accept(File dir,String name)

              {

                  return name.endsWith(".txt");//startsWith("e");

              }

         });

         for(String fd:arr)

         {

              System.out.println(fd);

         }

        System.out.println(f.getAbsolutePath());

     }

}