欢迎访问宙启技术站
智能推送

利用Java中的File类实现文件操作

发布时间:2023-06-16 05:29:18

Java中的File类是Java SE API中的标准类,它提供了一系列静态方法和实例方法,使得Java程序可以对文件和目录进行常见的操作,如创建、删除、重命名、复制、遍历等。本篇文章将介绍如何使用File类实现常见文件操作。

一、File类的基本操作

File类可以表示文件或者目录,我们可以使用它的构造方法来创建File对象,例如:

File file = new File("C:\\demo\\test.txt");

上面代码中,我们创建了一个File对象,表示在C盘demo目录下的test.txt文件。

1.创建文件或目录

File类提供了创建文件和目录的方法,可以用于检查文件或目录是否已经存在,如不存在就创建它。

- 创建文件

File file = new File("C:\\demo\\test.txt");
if (!file.exists()) {
    file.createNewFile();
}

上述代码首先创建了一个File对象,然后判断该文件是否存在,如果不存在就创建它。

- 创建目录

File file = new File("C:\\demo");
if (!file.exists()) {
    file.mkdir();
}

首先创建了一个File对象,然后判断该目录是否存在,如果不存在就创建它。

2.删除文件或目录

File类提供了删除文件和目录的方法,可以用于删除文件或目录及其下面的所有子目录和文件。

- 删除文件

File file = new File("C:\\demo\\test.txt");
if (file.exists()) {
    file.delete();
}

上述代码首先创建了一个File对象,然后判断该文件是否存在,如果存在就删除该文件。

- 删除目录

File file = new File("C:\\demo");
if (file.exists()) {
    file.delete();
}

首先创建了一个File对象,然后判断该目录是否存在,如果存在就删除该目录及其下面的所有子目录和文件。

3.重命名文件或目录

File类提供了重命名文件和目录的方法,可以用于将文件或目录重命名为新的名称。

- 重命名文件

File oldFile = new File("C:\\demo\\test.txt");
File newFile = new File("C:\\demo\\test_new.txt");
if (oldFile.exists()) {
    oldFile.renameTo(newFile);
}

上述代码首先创建了一个File对象表示原始的文件名test.txt,然后创建一个新的File对象表示重命名后的文件名test_new.txt,最后判断原始文件是否存在,如果存在就将其重命名为新的文件名。

- 重命名目录

File oldDir = new File("C:\\demo");
File newDir = new File("C:\\demo_new");
if (oldDir.exists()) {
    oldDir.renameTo(newDir);
}

首先创建了一个File对象表示原始的目录名demo,然后创建一个新的File对象表示重命名后的目录名demo_new,最后判断原始目录是否存在,如果存在就将其重命名为新的目录名。

4.复制文件或目录

File类没有提供直接复制文件或目录的方法,但可以通过IO流来实现。下面展示如何复制文件:

File source = new File("C:\\demo\\test.txt");
File target = new File("D:\\backup\\test.txt");
try (
    InputStream is = new FileInputStream(source);
    OutputStream os = new FileOutputStream(target);
) {
    byte[] buffer = new byte[1024];
    int length;
    while ((length = is.read(buffer)) > 0) {
        os.write(buffer, 0, length);
    }
} catch (IOException e) {
    e.printStackTrace();
}

上述代码首先创建了一个File对象表示源文件名test.txt,然后创建一个新的File对象表示目标文件名test.txt,接下来创建一个输入流和一个输出流,用于将源文件中的内容复制到目标文件中。

如果想要复制整个目录及其下面的所有子目录和文件,可以使用递归算法实现。

5.遍历目录

File类提供了遍历目录的方法,可以用于遍历某个目录下的所有文件和子目录。

File dir = new File("C:\\demo");
String[] files = dir.list();   // 列出目录下的所有文件和子目录的名称
for (String file : files) {
    System.out.println(file);
}

上述代码首先创建了一个File对象表示目录名demo,然后调用它的list()方法,列出该目录下的所有文件和子目录的名称。可以对返回的字符串数组进行遍历,打印每个文件和子目录的名称。

二、 File类的高级操作

除了基本操作外,File类还提供了一些高级操作,如获取文件或目录的属性信息、文件或目录的搜索等。

1.获取文件或目录的属性信息

File类提供了获取文件或目录的属性信息的方法,如最后修改时间、长度、是否可读等。

- 获取文件的最后修改时间

File file = new File("C:\\demo\\test.txt");
long lastModified = file.lastModified();  // 返回最后修改时间的毫秒数
Date date = new Date(lastModified);       // 将毫秒数转为日期格式
System.out.println(date);

上述代码首先创建了一个File对象表示文件名test.txt,然后调用它的lastModified()方法,获取文件的最后修改时间的毫秒数。最后将毫秒数转为日期格式,打印最后修改时间。

- 获取文件的长度

File file = new File("C:\\demo\\test.txt");
long length = file.length();    // 返回文件大小,单位为字节
System.out.println(length);

首先创建了一个File对象表示文件名test.txt,然后调用它的length()方法,获取文件大小,单位为字节。

2.文件或目录的搜索

File类提供了正则表达式搜索和递归搜索两种方式,可以用于查找符合条件的文件或目录。

- 正则表达式搜索

File dir = new File("C:\\demo");
FileFilter filter = new FileFilter() {
    @Override
    public boolean accept(File pathname) {
        return pathname.getName().matches("test.*");  // 搜索以test开头的文件
    }
};
File[] files = dir.listFiles(filter);
for (File file : files) {
    System.out.println(file);
}

上述代码首先创建了一个File对象表示目录名demo,然后创建一个FileFilter实例,用于过滤文件或目录。接下来调用File类的listFiles()方法,传入FileFilter实例作为参数,搜索目录下符合条件的文件或目录。可以对返回的File数组进行遍历,打印每个符合条件的文件或目录。

- 递归搜索

void searchFiles(File dir) {
    File[] files = dir.listFiles();
    for (File file : files) {
        if (file.isFile()) {
            System.out.println(file);
        } else {
            searchFiles(file);  // 递归搜索子目录
        }
    }
}

上述代码定义了一个searchFiles()方法,用于递归搜索某个目录及其下面的所有子目录和文件。首先获取该目录下的所有文件和子目录,然后遍历每个文件或子目录,如果是一个文件就打印它的路径,如果是一个目录就调用自身,继续搜索该子目录。

三、 File类的注意事项

1.路径分隔符

在Windows系统中,路径分隔符为反斜杠"\",但在Java中需要将反斜杠转义为双反斜杠"\\",因此代码中需要采用双反斜杠表示路径分隔符。

2.文件名区分大小写

在Windows系统中,文件名不区分大小写,但在Java中文件名区分大小写,因此需要注意文件名