利用Java中的File类实现文件操作
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中文件名区分大小写,因此需要注意文件名
