掌握Java的File类
8339字,阅读需时28分钟

文章导读

【电脑中存储的图片、电影、动画、资料等都是以文件方式存储的,当编写需要存储和读取文件的程序时,就需要程序支持对文件的操作。文件操作包括文件的创建与删除、读取与写入、遍历与查找。本文主要介绍文件的创建与删除、遍历与查找操作】


文件一般都存储在磁盘中,磁盘中的文件以目录树的方式组织起来,每一个目录就是一个存储文件的集合,目录下面又有子目录,形成层级目录树。当打开电脑查看某一盘符时,会看到盘符下有目录也有文件,其实盘符本身就是一个根目录,因此盘符下面既有目录也有文件。

Java把对文件和目录的操作都封装在Java.io包中,当程序需要对文件进行操作时,需要导入Java.io包到程序项目中。Java.io包提供了一个File类,用于文件和目录的创建、查找、遍历和删除。

1、用File类新建目录

File类提供了多个方法用于创建一个新的目录,分别说明如下:

●  boolean  mkdir()

该方法可以创建一个单级目录,目录路径在实例化File类时传入,如果目录路径包含父目录且该父目录不存在时,目录创建失败。目录创建成功返回true,创建失败返回false。

●  boolean  mkdirs()

该方法可以创建多级目录,目录路径在实例化File类时传入,如目录路径包含父目录且该父目录不存在时,该方法也同时创建其父目录。目录创建成功返回true,创建失败返回false。

下面的例子演示了如何应用File类创建一个新的目录。

package com.milihua.filedemo;
import java.io.File;
public class NewDirectory {
    public static void main(String[] args) {
        //用mkdir()创建单级目录
         String dirname = "c:/java";
         //实例化File对象时传入要创建的目录路径
         File  file = new File(dirname);
         if(file.mkdir())
         {
             System.out.println("目录:" + dirname + "创建成功");
         }
         else
         {
             System.out.println("目录:" + dirname + "创建失败");
             
         }
       
         //用mkdirs()创建多级目录
         dirname = "c:/java/print/data/src";
         //实例化File对象时传入要创建的目录路径
         file = new File(dirname);
         if(file.mkdirs())
         {
             System.out.println("目录:" + dirname + "创建成功");
         }
         else
         {
             System.out.println("目录:" + dirname + "创建失败");
             
         }
 
    }
}

代码分别用mkdir()和mkdirs()创建目录,mkdir()和mkdirs()不同之处是mkdir()只能创建单级目录,mkdirs()可以创建多级目录。mkdirs()方法创建的目录路径为“c:/java/print/data/src”,该路径包含多个目录,且其中的print、data、src目录都不存在,用mkdirs()可以成功创建print、data、src目录,如果用mkdir()则创建失败。

程序输出结果如下图所示:

blob.png

图1 创建目录示例程序输出结果

2、用File类删除目录

File类也提供了删除目录的操作,分别说明如下:

●  boolean  delete()

该方法用于删除文件或者一个空目录,空目录是指不包含任何内容的目录,删除成功返回true,否则返回false。

下面的例子演示了如何应用File类删除一个目录。

package com.milihua.filedemo;
import java.io.File;
public class DeleteDirectory {
    public static void main(String[] args) {
        //用delete方法删除目录
         String dirname = "c:/java";
         //实例化File对象时传入要创建的目录路径
         File  file = new File(dirname);
         if(file.delete())
         {
             System.out.println("目录:" + dirname + "删除成功");
         }
         else
         {
             System.out.println("目录:" + dirname + "删除失败");
             
         }
 
    }
}

代码删除“c:/java”目录,如果该目录下有子目录或文件,则删除失败。同理,该方法也可以用于删除文件。

3、用File类创建文件

File类提供了createNewFile和createTempFile方法用来创建文件,分别说明如下:

●  boolean  createNewFile ()

该方法用于创建一个新的空文件,文件存储路径由实例化File类时传入的路径指定,当路径指定的文件存在时,文件创建失败。当文件存储路径所在目录不存在时,文件也会创建失败。

●  boolean createTempFile(String prefix, String suffix, File directory)

  该方法用于创建临时文件,可以指定临时文件的文件名前缀、后缀及文件所在的目录,如果不指定目录,则存放在系统的临时文件夹下。 

下面的例子演示了如何应用File类创建一个新的文件。

package com.milihua.filedemo;
import java.io.File;
import java.io.IOException;
public class NewFile {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
         //用createNewFile()在c:/java目录下创建config.txt
         String dirname = "c:/java/config.txt";
         //实例化File对象时传入要创建的目录路径
         File  file = new File(dirname);
         try {
            if(file.createNewFile())
             {
                 System.out.println("文件:" + dirname + "创建成功");
             }
             else
             {
                 System.out.println("文件:" + dirname + "创建失败");
                 
             }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("文件" + dirname + "创建失败!" + e.getMessage()); 
        }
    }
}

代码在用createNewFile()在c:/java目录下创建config.txt文件。如果c:/java目录不存在,则抛出异常。如下图所示:

blob.png

图2 创建文件失败程序抛出异常

在C盘下建立java目录,再执行该程序,文件创建成功。

4、用File类删除文件

用File类删除文件,同样也是用delete方法。不过在删除文件之前,最好判断一下该文件是否存在,否则会抛出异常。代码如下:

package com.milihua.filedemo;
import java.io.File;
public class DeleteFile {
    public static void main(String[] args) {
         //用delete删除c:/java目录下创建config.txt文件
         String dirname = "c:/java/config.txt";
         //实例化File对象时传入要删除的文件路径
         File  file = new File(dirname);
         //用File类的exists()方法,判断被删除的文件是否存在
         if (file.exists())
         {
             if(file.delete())
                 System.out.println("文件:" + dirname + "删除文件成功");
             else
                 System.out.println("文件:" + dirname + "删除文件失败");
         }
         else
         {
             System.out.println("文件:" + dirname + "不存在");
             
         }
         
    }
}

5、用File类遍历目录和文件

File类提供了list和listFiles方法用于获取指定目录下的文件和目录。

●  File[]  listFiles ()

该方法用于返回某个目录下所有文件和目录的File对象,返回的是File对象数组。

●  String[]  list ()

该方法用于返回某个目录下的所有文件和目录的文件名,返回的是String数组。

应用递归方法遍历指定目录下的所有子目录和文件,代码如下:

package com.milihua.filedemo;
import java.io.File;
public class TraverseFile {
    public static void main(String[] args) {
        File file = new File("D:\\apach");
        listFiles(file);
    }
 
    public static void listFiles(File dir) {
        // 如果当前文件或目录存在
        if (dir.exists()) {
            // 如果是目录,则:
            if (dir.isDirectory()) {
                // 打印当前目录的路径
                System.out.println(dir);
                // 获取该目录下的所有文件和目录组成的File数组
                File[] files = dir.listFiles();
                // 递归遍历每一个子文件
                for (File file : files) {
                    listFiles(file);
                }
            }
            // 如果是文件,则打印该文件路径及名称
            else {
                System.out.println(dir);
            }
        }
    }
}

代码应用递归技术遍历指定目录下的子目录和文件,输出结果如下图所示:

blob.png

图3 遍历目录和文件示例程序输出结果

文章小结

使用File类可以创建、删除、遍历目录及文件,但不能用于读写文件,读写文件需要用到Java的输入与输出流。

我要评论
全部评论
郎宏林
授课老师
授课老师简介
项目经理,系统分析和架构师,从事多年中文信息处理技术。熟悉项目管理、擅长项目需求分析和设计、精通Java、C#、Python等编程语言。
下载APP

手机、电脑同步学

用微信或手机浏览器扫描二维码,即可下载APP。

  • 备案号:鲁ICP备15001146号
  • @1997-2018 潍坊米粒花网络技术有限公司版权所有