Java File类是对文件系统中的文件和文件夹进行操作的类。它提供了很多常用的方法,可以方便地对文件进行读取、写入和其他的一些操作。本文将详细讲解Java File类的常用方法及文件过滤器的使用。
文件对象创建
File类的构造方法很多,常见的有以下几种:
- File(File parent, String child):从父抽象路径名和子路径名字符串创建新的File实例。
- File(String pathname):通过将给定路径名字符串转换为抽象路径名来创建新的 File实例。
- File(URI uri):通过将给定的file: URI转换为抽象路径名来创建新的File实例。
其中,构造方法2和3比较常用。示例代码如下:
// 创建文件对象方法一
File file1 = new File("file1.txt");
// 创建文件对象方法二
File file2 = new File("C:\\Users\\Administrator\\Desktop\\file2.txt");
// 创建文件对象方法三
File file3 = new File(new URI("file:///C:/Users/Administrator/Desktop/file3.txt"));
文件常用方法
文件的读写
Java中可使用 FileInputStream 和 FileOutputStream 类读写文件。其中 FileInputStream 用于打开一个输入文件,而 FileOutputStream则用于打开一个输出文件。
示例代码如下:
File file = new File("demo.txt");
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream("copy.txt");
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fis.close();
fos.close();
获取文件信息
文件信息包括:文件名、文件路径、文件大小、最后修改日期等。可以使用以下方法得到文件的相关信息:
- getName():获取文件名。
- getPath():获取文件绝对路径。
- length():获取文件大小。
- lastModified():获取最后修改日期。
示例代码如下:
File file = new File("demo.txt");
System.out.println("文件名:" + file.getName());
System.out.println("文件路径:" + file.getPath());
System.out.println("文件大小:" + file.length() + " 字节");
System.out.println("最后修改时间:" + new Date(file.lastModified()));
文件过滤器
文件过滤器是用于将一个文件集合中不符合条件的文件过滤掉,只留下符合条件的文件。File类中的 list()、listFiles() 和 walk() 方法都支持传入一个文件过滤器,以得到特定的文件集合。
以下是一个使用文件过滤器获取特定文件集合的示例:
class FileNameFilter implements FileFilter {
private String ext;
public FileNameFilter(String ext) {
this.ext = "." + ext;
}
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(ext);
}
}
public class FileFilterExample {
public static void main(String[] args) {
File dir = new File("D:\\test");
if (!dir.exists()) {
return;
}
File[] files = dir.listFiles(new FileNameFilter("txt"));
for (File file : files) {
System.out.println(file.getName());
}
}
}
以上代码会获取 D:\test 目录中所有扩展名为 .txt 的文件。
此外,File类还提供了一些预定的过滤器:
- FileFilter:过滤文件,只留下符合条件的文件。
- FilenameFilter:过滤文件名,只留下符合指定文件名的文件。
- PathFilter:过滤路径,只留下符合条件的位置
- DirectoryStream.Filter: 通过DirectoryStream得到的Stream<Path>对象在过滤时需要使用该接口
示例代码如下:
// 过滤文件
File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory() || pathname.getName().endsWith(".txt");
}
});
// 过滤文件名
File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".txt") || name.endsWith(".java");
}
});
// 过滤路径
File[] files = dir.listFiles(new PathFilter() {
@Override
public boolean accept(File file) {
return file.getAbsolutePath().startsWith("D:");
}
});
// 过滤文件
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir.toPath(), "*.txt")) {
for (Path entry : stream) {
System.out.println(entry.getFileName());
}
}
以上代码分别演示了如何使用 FileFilter、FilenameFilter、PathFilter 和 DirectoryStream.Filter 来过滤文件。
通过上述内容,我们对 Java File类常用方法与文件过滤器的使用有了全面的了解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java File类常用方法与文件过滤器详解 - Python技术站