首页 > 代码库 > 探究java IO之File类

探究java IO之File类

尽管java.io定义的大多数类用于操作流,但File类却不是。File类直接处理文件和文件系统。也就是说,File类没有指定如何从文件检索信息以及如何向文件中存储信息,而是描述了文件本身的属性。File对象用于获取和操作与磁盘文件关联的信息,例如权限,时间日期以及目录路径,并且还可以浏览子目录层次。

注意:由JDK7为NIO系统增加的Path接口和File类,在许多情况下都为File类提供了强大的替换方案,具体看后面的NIO章节。

下面的构造函数可以用于创建File对象:

File(String directoryPath)
File(String directoryPath,String filename)
File(File dirObj,String filename)
File(URI uriObj)

其中,directoryPath是文件的路径名;filename是文件或子目录的名称; dirObj是指定目录的File对象;uriObj是描述文件的URI对象。

注意:Java使用介于UNIX和Windows约定之间的路径分隔符。如果在Windows版本的Java中使用正斜杠(/),那么路径仍然会被正确解析。请记住,如果使用Windows约定的反斜杠(\),那么在字符串中需要使用转义序列(\\)。

我们来看看File调用的示例:

package io;

import java.io.File;

public class FileDemo {
    public static void main(String[] args) {
        File f1 = new File("/home/fuhd/apache/apr-1.5.1.tar.gz");
        //返回文件名
        System.out.println("File name:" + f1.getName());
        //返回文件路径
        System.out.println("Path:" + f1.getPath());
        //返回绝对路径
        System.out.println("Abs Path:" + f1.getAbsolutePath());
        //返回父目录路径
        System.out.println("Parent:" + f1.getParent());
        //是否存在
        System.out.println(f1.exists() ? "exists" : "does not exist");
        //是否有权限写
        System.out.println(f1.canWrite() ? "is writeable" : "is not writeable");
        //有否有权限读
        System.out.println(f1.canRead() ? "is readable" : "is not readable");
        //是否是文件
        System.out.println(f1.isFile() ? "is normal file" : "might be a maned pipe");
        //是否有绝对路径
        System.out.println(f1.isAbsolute() ? "is absolute" : "is not absolute");
        //文件最后修改时间
        System.out.println("File last modified:" + f1.lastModified());
        //文件大小
        System.out.println("File size:" + f1.length() + " Bytes");
    }
}

File类还提供了两个有用的实用方法。第一个方法是renameTo(),如下所示:

boolean renameTo(File newName)

其中,由newName指定的文件名成为调用File对象的新名称。如果操作成功,就返回true,如果文件不能被重命令就返回false。第二个实用方法是delete(),该方法删除调用File对象的路径所代表的磁盘文件。该方法如下:

boolean delete()

如果目录为空的话,可以使用delete()方法删除这个目录。如果删除成功,delete()方法将返回true;如果不能删除文件,就返回false。

JDK7为File类新增了方法 toPath(),该方法如下所示:

Path toPath()

toPath()方法返回的Path对象表示由调用File对象封装的文件(换句话说,toPath()方法可以将File对象转换成Path对象)。Path是由JDK7新添加的接口。该接口被打包到java.nio.file包中,是NIO组成部分。因此,toPath()方法在旧的File类和新的Path接口之间搭建了一所桥梁。(当然,以前的方法都不是File类的全部,这里只是做了部分介绍而已)

目录

目录是包含一系列其他文件和目录的File对象。当为目录创建File对象时,isDirectory()方法将会返回true。在这种情况下,可以对File对象调用list()方法以提取内部的其他文件和目录列表。如例:

package io;

import java.io.File;

public class DirList {
    public static void main(String[] args) {
        String dir = "/home/fuhd/apache";
        File file = new File(dir);
        if(file.isDirectory()){
            String[] fileList = file.list();
            if(fileList != null && fileList.length > 0){
                for(String f1 : fileList){
                    System.out.println("文件名:" + f1);
                }
            }
        }
    }
}

使用FilenameFilter接口



探究java IO之File类