Java文件

时间:2020-01-09 10:36:02  来源:igfitidea点击:

Java IO API中的Java File类" java.io.File"使我们可以访问基础文件系统。使用Java File类,我们可以:

  • 检查文件或者目录是否存在。
  • 如果目录不存在,请创建一个目录。
  • 读取文件的长度。
  • 重命名或者移动文件。
  • 删除文件
  • 检查路径是文件还是目录。
  • 读取目录中的文件列表。

该Java File教程将告诉我们更多有关方法。

注意:Java File类仅使我们可以访问文件和目录元数据。如果需要读取或者写入文件的内容,则应使用FileInputStream,FileOutputStream或者RandomAccessFile。

注意:如果要使用Java NIO(Java的非阻塞IO API),则必须使用java.nio.FileChannel类。 Java File和FileChannel都可以使用,但是如果我们想要纯Java NIO解决方案,请使用Java NIO FileChannel类。

创建文件

在对文件系统或者File类进行任何操作之前,必须创建一个Java File实例。这是创建Java File实例的示例:

File file = new File("c:\data\input-file.txt");

Java File构造函数将我们要File实例指向的文件的基础文件系统中的文件路径作为参数。请注意,文件或者目录路径实际上不必引用现有文件或者目录。如果没有,我们将不会从File构造函数中获得异常。当我们要检查文件是否存在,或者我们要创建一个新文件时,此行为很有用。

JavaFile类还具有其他一些构造函数,我们可以使用它们以不同的方式实例化File实例。

检查文件或者目录是否存在

我们可以使用Fileexists()方法检查Java File对象引用的文件是否存在。这是检查文件是否存在的示例:

File file = new File("c:\data\input-file.txt");

boolean fileExists = file.exists();

上面的代码也适用于目录。我们需要检查目录是否存在的唯一更改是将文件系统路径传递给Java File构造函数的目录,并传递文件路径。这是检查目录是否存在的示例:

File file = new File("c:\data");

boolean fileExists = file.exists();

创建目录(如果不存在)

我们可以使用JavaFile类创建目录(如果尚不存在)。 File类包含用于此目的的方法mkdir()和mkdirs()。

如果mkdir()方法尚不存在,它会创建一个目录。这是通过Java File类创建单个目录的示例:

File file = new File("c:\users\HymanHyman\newdir");

boolean dirCreated = file.mkdir();

假设目录" c:\ users \ HymanHyman"已经存在,则上面的代码将创建一个名为" newdir"的" HymanHyman"子目录。如果创建了目录,则mkdir()返回true,否则返回false。

mkdirs()将创建File对象所代表的路径中缺少的所有目录。这是通过Java File类创建多个目录的示例:

File file = new File("c:\users\HymanHyman\newdir");

boolean dirCreated = file.mkdirs();

假设C驱动器存在,此示例将在路径c:\ users \ HymanHyman \ newdir中创建所有目录。如果创建了所有目录,则mkdirs()方法将返回true,否则将返回false。

文件长度

Java File类使我们可以读取文件的长度(以字节为单位)。要读取文件的长度,请调用File的length()方法。这是一个通过Java File的length()方法读取文件长度的示例:

File file = new File("c:\data\input-file.txt");

long length = file.length();

重命名或者移动文件或者目录

要重命名(或者移动)文件,请在File类上调用方法renameTo()。这是一个简单的示例:

File file = new File("c:\data\input-file.txt");

boolean success = file.renameTo(new File("c:\data\new-file.txt"));

如前所述,renameTo()方法也可以用于将文件移动到另一个目录。传递给renameTo()方法的新文件名不必与文件已经驻留在同一目录中。

renameTo()方法返回布尔值(true或者false),指示重命名是否成功。重命名移动文件可能由于各种原因而失败,例如文件被打开,错误的文件权限等。

顺便说一下,Java File的renameTo()方法也适用于目录。只需将目录的路径传递到File构造函数,而不是文件的路径即可。

删除文件或者目录

要删除文件,请调用Java File的delete()方法。这是一个简单的示例:

File file = new File("c:\data\input-file.txt");

boolean success = file.delete();

delete()方法返回布尔值(true或者false),指示删除是否成功。删除文件可能由于各种原因而失败,例如文件打开,错误的文件权限等。

Java Filedelete()方法也适用于目录,这意味着我们也可以使用它删除目录。

递归删除目录和子目录

Java Filedelete()方法只能在目录为空的情况下删除目录。要删除包含文件和子目录的目录,必须先遍历该目录并首先删除所有文件和子目录,然后才能删除根目录。该迭代必须递归执行,因此我们还删除子目录及其子目录的所有内容。否则,删除根目录将失败。这是一个Java方法,可以递归删除目录及其所有子目录及其文件:

public static boolean deleteDir(File dir){
    File[] files = dir.listFiles();
    if(files != null){
        for(File file : files){
            if(file.isDirectory()){
                deleteDir(file);
            } else {
                file.delete();
            }
        }
    }
    return dir.delete();
}

检查路径是文件还是目录

正如本Java File教程前面几次提到的," File"对象可以指向文件或者目录。我们可以通过调用isDirectory()方法来检查File对象是否指向文件或者目录。如果"文件"指向目录,则此方法返回" true",如果"文件"指向文件,则返回" false"。这是一个简单的示例:

File file = new File("c:\data");

boolean isDirectory = file.isDirectory();

读取目录中的文件列表

我们可以通过调用Java File list()方法或者listFiles()方法来获取目录中所有文件的列表。 list()方法返回一个String数组,其中包含File对象指向的目录的文件和/或者目录名称。 listFiles()返回一个File对象数组,这些对象代表File指向的目录中的文件和/或者目录。

这是一个通过Java Filelist()listFiles()方法列出目录中所有文件的示例:

File file = new File("c:\data");

String[] fileNames = file.list();

File[]   files = file.listFiles();