Java语言使用File类对文件和目录进行操作,查找文件时需要实现FilenameFilter或FileFilter接口。读写文件内容可以通过FileInputStream、FileOutputStream、FileReader和FileWriter类实现。
File类
File类是跨平台的,表示一个文件或一个目录(文件夹)
File类中常用的方法如下:
1、构造方法
File(String path):如果path是实际存在的路径,则对File对象表示的是目录;如果path是文件名,则该File对象表示的是文件。
File(String path,String name):path是路径名,name是文件名。
File(File dir,String name):path是路径对象,name是文件名。
2、获得文件名
String getName():获得文件的名称,不包括路径。
String getPath():获得文件的路径。
String getAbsolutePath():获得稳健的绝对路径。
3、文件属性测试
boolean exists():测试当前File对象所表示的文件是否存在。
boolean canWrite():测试当前文件是否可写。
boolean canRead():测试当前文件是否可读。
boolean isFile():测试当前文件是否是文件。
boolean isDirectory():测试当前文件是否是目录。
4、文件操作
long lastModified():获得稳健最近一次修改的时间。
long length():获得稳健的长度,以字节为单位。
boolean delete():删除当前文件,成功返回true,否则返回false。
boolean renameTo(File dest):将重新命名当前File对象所表示的文件,成功返回true,否则返回false。
5、目录操作
boolean mkdir():创建当前File对象指定的目录。
String[] list():返回当前目录下的文件和目录,返回值是字符串数组。
String[] list(FilenameFilter):返回当前目录下满足指定过滤器的文件和目录,参数是实现FilenameFilter接口对象,返回值是字符串数组。
File[] listFiles():返回当前目录下的文件和目录,返回值是File数组。
File[] listFiles(FilenameFilter filter):返回当前目录下满足指定过滤器的文件和目录,参数是实现FileNameFilter接口对象,返回值是File数组。
File[] listFiles(FileFilter filter):返回当前目录下满足指定过滤器的文件和目录,参数是实现FileFilter接口对象,返回值是File数组。
对目录操作有两个过滤器接口:FilenameFilter和FileFilter,他们都只有一个抽象方法accept。
FilenameFilter接口中的accept方法如下:
boolean accept(File dir,String name):测试指定dir目录中是否包含文件名为name的文件。
FileFilter接口中的accept方法如下:
boolean accept(File pathname):测试指定路径名是否应该包含在某个路径名列表中。
代码示例(在指定的目录中列出文件信息)
import java.io.File;
import java.io.FilenameFilter;
//过滤获取html文件
public class FileTest {
public static void main(String[] args) {
//当前目录就是工程的根目录
File dir = new File("./TestDir");//或TestDir
//初始化过滤器,获取后缀名为“html”的文件
Filter filter = new Filter("html");
//files获取结果集
String files[] = dir.list(filter);
//使用for-each循环遍历
for(String filename:files){
File file = new File(filename);
//判断这个file是否是文件
if(file.isFile()){
//打印名称
System.out.println(file.getName());
//打印路径
System.out.println(file.getAbsolutePath());
}else{// 判断这个file是否是目录
System.out.println(file);
}
}
}
}
//过滤器类,实现FilenameFilter接口
class Filter implements FilenameFilter{
String extent; //文件后缀名
//带参数构造函数
Filter(String extent) {
this.extent = extent;
}
//accept实现,来自FilenameFilter接口
@Override
public boolean accept(File dir,String name){
boolean b = name.endsWith("."+extent);//html文件
return b;
}
}