zoukankan      html  css  js  c++  java
  • Java IO File类

    Java I/O系统

    File类

      File类的直接父类是Object类。

      一个File类的对象,表示了磁盘上的文件或目录。

      File类提供了与平台无关的方法来对磁盘上的文件或目录进行操作。因为不同的系统平台对文件路径的描述不尽相同,所以为了做到平台无关,在Java语言中,使用抽象路径等概念。Java自动进行不同系统平台的文件路径描述与抽象文件路径之间的转换。

      File类直接处理文件和文件系统。

      File类没有指定信息怎样从文件读取或向文件存储。

      File类描述了文件本身的属性。(读写属性等)。

      File对象用来获取或处理与磁盘文件相关的信息,例如权限,时间,日期和目录路径。

      File类还可以浏览子目录层次结构。

     

    File类的构造函数

      File类有四个构造函数:

      File(String pathname)

      File(File parent, String child)

      File(String parent, String child)

      File(URI uri)

      利用构造方法,指定路径名、文件名等来构造File类的对象,之后调用该对象的createNewFile()方法就可以创建出相应的文件。

      parent指定路径(父目录),可以是File类对象也可以是字符串,child中也可以加入路径层级,但要注意,所用的路径必须存在,不存在的路径不会新建。

      关于斜杠和反斜杠,只能如下生硬地先记住吧:

      \\:右手用两个,比如new File("D:\\abc\\" + "Test.txt");

      /:左手用一个。比如new File("D:/abc/" + "Test.txt");

      

      一个File类对象既可以表示目录也可以表示文件。

      有两个函数用于判断File类的对象到底表示什么:

      public boolean isDirectory()

      public boolean isFile()

      它们的名称和返回值都很显然,就不多做解释了。

     

    目录管理

      目录操作的主要方法为:

      public boolean mkdir()

      public boolean mkdirs()

      根据抽象路径名创建目录。它们俩的区别下面会做解释。

      public String[] list()

      返回抽象路径名表示目录下的文件名和目录名。

      public File[] listFiles()

      返回抽象路径名下的所有文件。与list()方法的不同之处在于一个返回的是字符串,另一个返回的是File类对象

      前面提到File类对象既可以是文件也可以是目录,创建文件是createNewFile()方法,相对应的,创建目录即调用mkdir()方法。

      注意mkdir()方法使用时只能新建一个文件夹,如下程序:

    public class FileTest2
    {
          public static void main(String[] args)
          {
                 File file = new File("D:/abc/xyz/hello");
    
                 file.mkdir();
          }
    }

      假设D盘下abc目录已经存在,但xyz目录不存在,则不能成功创建hello目录。

      要用mkdir()创建目录,必须上一级目录存在,即最底层目录前面的目录全都存在。

      要想把File对象包含的目录一次性全都创建好,可以使用mkdirs()方法。

      如果目录已经存在,不用创建,则返回false。

      注意mkdirs()方法即便返回false,也可能新创建了一些必要的父目录。

     

    文件管理

      在进行文件操作时,常需要知道一个关于文件的信息。

      Java的File类提供了方法来操纵文件和获得一个文件的信息。如getName()返回文件名,getParent()返回父目录名,exists()测试文件或目录是否存在。

      然而,File类是不对称的,说它不对称,意思是虽然存在允许验证一个简单文件对象属性的很多方法,但是没有响应的方法来修改这些属性,即有get无set。

      另外,File类还可以对目录和文件进行删除、属性修改等工作。方法名都比较直观,在此不多做介绍了。

     

    使用FilenameFilter

      希望能够限制由list()方法返回的文件,使它仅返回那些与一定的文件名方式或者过滤器(filter)相匹配的文件。

      为达到这样的目的,必须使用list()方法的带参数的重载形式:

      public String[] list(FilenameFilter filter)

      在该形式中,filter是一个实现了FilenameFilter接口的类的对象。

      该接口中有一个accept()方法,只有该方法判断为true的文件名会被list方法返回。所以可以在accept方法中设置筛选规则。(这里使用了策略模式,可以回想一下Java集合中的比较器)。

      在此直接放出程序实例,来查看指定目录下的文件:

    文件名显示程序
    import java.io.File;
    import java.io.FilenameFilter;
    
    public class FileTest4
    {
    
        public static void main(String[] args)
        {
            File file = new File("D:/abc");
            String[] names = file.list();
    
            // 列出所有文件及路径
            for (String name : names)
            {
                System.out.println(name);
            }
            System.out.println("-----------------------");
            System.out.println("-------所有文件名为.java结尾的文件-----------");
            // 选择.java结尾的文件
            for (String name : names)
            {
                if (name.endsWith(".java"))
                {
                    System.out.println(name);
                }
            }
    
            // 使用文件过滤器
            String[] selectedNames = file.list(new FilenameFilter()
            {
                // 匿名内部类实现了FilenameFilter接口
    
                // 实现接口中的方法
    
                @Override
                public boolean accept(File dir, String name)
                {
                    if (name.endsWith(".java")) { return true; }
                    return false;
                }
            });
            // 只有accept返回true的文件名会被返回到selectedNames数组中
    
            System.out.println("-----------------------");
            System.out.println("-------所有文件名为.java结尾的文件-----------");
            for (String name : selectedNames)
            {
                System.out.println(name);
            }
    
        }
    }

    参考资料

      张龙老师Java SE系列视频教程。

      File类官方文档:

      http://docs.oracle.com/javase/7/docs/api/java/io/File.html

     

  • 相关阅读:
    lab4:VGG16 及 如何把c的for转成verliog状态机
    pl向ps传输8位数据:axi-lite
    lab3:LeNet上板
    UVALive5902:Movie collection
    UVa11069:A Graph Problem
    UVa10323:Factorial! You Must be Kidding!!!
    UVa10220:I Love Big Numbers !
    UVa623:500!
    UVa568:Just the Facts
    UVa11549:Calculator Conundrum
  • 原文地址:https://www.cnblogs.com/mengdd/p/2909905.html
Copyright © 2011-2022 走看看