首页 > 编程笔记 > Java笔记 阅读:12

Java中的File类(非常详细)

在 Java 应用程序中经常会使用文件保存数据或作为数据源为程序提供数据。在进行文件操作时,需要知道关于文件的一些信息,通过 File 类可以获取文件本身的一些属性信息,例如文件名称、所在路径、可读性、可写性、文件的长度等。

Java File类的构造方法

File 类的构造方法主要有以下几种:
通过以上三个构造方法可以创建一个 File 对象,示例代码如下:
File f1 = new File("/");
File f2 = new File("/","text.txt");
File f3 = new File(f1,"text.txt");
上面代码创建了三个 File 对象 f1、f2 和 f3,在指定路径时,使用了“/”作为分隔符,也可以使用“\\”。

使用 File 类进行操作,首先要设置文件的路径。Windows 系统的路径如“E:\教材编写\Java2023”,分隔符为“\”。但是在 Java 中“\”表示转义,在 Windows 系统的 Java 代码中,“\”可以表示路径,因此,在 Windows 系统使用“\”作为路径分隔符,就要使用两个“\”,如“E:\\教材编写\\Java2023”。

Windows 系统也支持将“/”作为分隔符,所以在 Windows 系统中,路径有以下两种表示方法:

Java File类的常用方法

如果创建一个文件对象,就可以使用 File 类的相关方法来获得文件的相关信息,对文件进行操作。

File 类的常见方法如下所示。

1) 文件名的操作

方法 描述
public String getName() 获取文件的名字。
public String toString() 返回文件的路径名字符串。
public String getParent() 获取文件父路径字符串。
public File getPath() 获取文件的相对路径字符串。
public String getAbsolutePath() 获取文件的绝对路径字符串。
public String getCanonicalPath() throws IOException 返回规范的路径名字符串。
public File getCanonicalFile() throws IOException 返回文件(含相对路径名)规范形式。
public File getAbsoluteFile() 返回此抽象路径名的绝对形式。
public boolean renameTo(File dest) 重命名由此抽象路径名表示的文件。
public static File createTempFile(String prefix, String suffix, File directory) throws IOException 在指定的目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
public static File createTempFile(String prefix, String suffix) throws IOException 在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。
public boolean createNewFile() throws IOException 当指定文件不存在时,建立一个空文件。

2) 文件属性测试

方法 描述
public boolean canRead() 测试应用程序是否能读指定的文件。
public boolean canWrite() 测试应用程序是否能修改指定的文件。
public boolean exists() 测试指定的文件是否存在。
public boolean isDirectory() 测试指定文件是否为目录。
public boolean isAbsolute() 测试路径名是否为绝对路径。
public boolean isFile() 测试指定的文件是否为一般文件。
public boolean isHidden() 测试指定的文件是否为隐藏文件。

3) 一般文件信息和工具


方法 描述
public long lastModified() 返回指定的文件最后被修改的时间。
public long length() 返回指定文件的字节长度。
public boolean delete() 删除指定的文件。
public void deleteOnExit() 当虚拟机执行结束时,请求删除指定的文件或目录。

4) 目录操作

方法 描述
public boolean mkdir() 创建指定的目录,正常建立时返回true,否则返回false。
public boolean mkdirs() 创建指定的目录,包含任何不存在的父目录。
public String[] list() 返回指定目录下的文件(存入数组)。
public String[] list(FilenameFilter filter) 返回指定目录下满足指定文件过滤器的文件。
public File[] listFiles() 返回指定目录下的文件。
public File[] listFiles(FilenameFilter filter) 返回指定目录下满足指定文件过滤器的文件。
public File[] listFiles(FileFilter filter) 返回指定目录下满足指定文件过滤器的文件(返回路径名应满足文件过滤器)。
public static File[] listRoots() 列出可用文件系统的根目录结构。

5) 文件属性设置

6) 其他


一个 File 对象表示的文件并不是真正的文件,只是一个代理而已,通过这个代理可以操作文件。

创建一个文件对象和创建一个文件在 Java 中是两个不同的概念。前者是在虚拟机中创建一个文件,但却没有将它真正地创建到 OS 的文件系统,随着虚拟机的关闭,这个创建的对象也就消失了。而创建一个文件才是在系统中真正地创建文件。

例如如下代码:
File f = new File("11.txt"); // 创建一个名为 11.txt 的文件对象
f.createNewFile(); // 真正地创建文件

【实例】 File 类查看文件目录和文件属性。根据命令行输入的参数,如果是目录,则显示目录下的所有文件与目录名称;如果是文件,则显示文件的属性。
import java.io.*;
import java.util.*;

public class FileDemo {
    public static void main(String[] args) {
        try {
            File file = new File(args[0]);
            if (file.isFile()) { // 是否为文件
                System.out.println(args[0] + " 文件 ");
                if (file.canRead())
                    System.out.println("可读 ");
                else
                    System.out.println("不可读 ");
                if (file.canWrite())
                    System.out.println("可写 ");
                else
                    System.out.println("不可写 ");
                System.out.println(file.length() + " 字节 ");
            } else {
                File[] files = file.listFiles(); // 列出所有的文件及目录
                ArrayList<File> fileList = new ArrayList<File>();
                for (int i = 0; i < files.length; i++) {
                    if (files[i].isDirectory()) { // 是否为目录
                        System.out.println("[" + files[i].getPath() + "]");
                    } else {
                        fileList.add(files[i]); // 文件先存入 fileList
                    }
                }
                for (File f : fileList) {
                    System.out.println(f.toString()); // 列出文件
                }
                System.out.println();
            }
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("using: Java FileDemo pathname");
        }
    }
}
程序执行结果为:

d:\\user.txt 文件
可读
可写
27字节

相关文章