1.File类基本用法
java.io.File类:代表文件和目录。在开发中,读取文件、生成文件、删除文件、修改文件的属性时经常会用到本类。
File类的常见构造方法:public File(String pathname)
pathname代表文件路径,该路径可以为相对路径,也可以为绝对路径。如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。
【示例】分别以相对路径和绝对路径创建File对象
public static void main(String[] args) throws IOException {
// 获取当前工作目录路径
System.out.println(System.getProperty("user.dir"));
// 1.相对路径创建File对象:默认放到user.dir目录下面
File file1 = new File("abc.txt");
// 创建文件
file1.createNewFile();
// 2.绝对路径创建File对象
File file2 = new File("D:/abc.txt");
// 创建文件
file2.createNewFile();
}
在eclipse项目开发中,user.dir就是本项目的目录。因此,执行完毕后,在本项目和D盘下都生成了新的文件(如果是eclipse下,一定按F5刷新目录结构才能看到新文件)。如图所示:
File类的其它构造方法,详情请查看以下表格:
构造方法 | 描述 |
---|---|
public File(String pathname) | 通过将给定路径名字符串转换为抽象路径名来创建一个新File实例 |
public File(File parent, String child) | 根据parent抽象路径名和child路径名字符串创建一个新File实例 |
public File(String parent, String child) | 根据parent路径名字符串和child路径名字符串创建一个新File实例 |
2.File类获取功能
方法名 | 描述 |
---|---|
public String getName() | 返回由此抽象路径名表示的文件或目录的名称。 |
public String getPath() | 返回此抽象路径名的绝对形式(绝对路径或相对路径)。 |
public String getAbsolutePath() | 返回此抽象路径名的绝对形式(绝对路径)。 |
public long lastModified() | 返回此抽象路径名表示的文件最后一次被修改的时间。 |
public long length() | 返回由此抽象路径名表示的文件的长度。 |
【示例】File类基本获取功能
// 1.相对路径创建File对象
File file = new File("abc.txt");
// 2.获取文件或目录名字
System.out.println(file.getName());
// 3.返回此抽象路径名的绝对形式(绝对路径或相对路径)。
System.out.println(file.getPath());
// 4.返回此抽象路径名的绝对形式(绝对路径)。
System.out.println(file.getAbsolutePath());
// 5.返回此抽象路径名表示的文件最后一次被修改的时间
System.out.println(file.lastModified());
// 6.返回由此抽象路径名表示的文件的长度。
Sstem.out.println(file.length());
3.File类判断功能
方法名 | 描述 |
---|---|
public boolean exists() | 测试此抽象路径名表示的文件或目录是否存在。 |
public boolean isDirectory() | 测试此抽象路径名表示的文件是否是一个目录。 |
public boolean isFile() | 测试此抽象路径名表示的文件是否是一个标准文件。 |
public boolean isHidden() | 测试此抽象路径名指定的文件是否是一个隐藏文件。 |
public boolean canRead() | 测试应用程序是否可以读取此抽象路径名表示的文件。 |
public boolean canWrite() | 测试应用程序是否可以修改此抽象路径名表示的文件。 |
【示例】File类判断功能案例
// 1.相对路径创建File对象
File file = new File("abc.txt");
// 2.测试此抽象路径名表示的文件或目录是否存在。
System.out.println(file.exists());
// 3.测试此抽象路径名表示的文件是否是一个目录。
System.out.println(file.isDirectory());
// 4.测试此抽象路径名表示的文件是否是一个标准文件。
System.out.println(file.isFile());
// 5.测试此抽象路径名指定的文件是否是一个隐藏文件。
System.out.println(file.isHidden());
// 6.测试应用程序是否可以读取此抽象路径名表示的文件。
System.out.println(file.canRead());
// 7.测试应用程序是否可以修改此抽象路径名表示的文件。
System.out.println(file.canWrite());
4.File类其它功能
方法名 | 描述 |
---|---|
public boolean mkdir() | 创建此抽象路径名指定的目录。 |
public boolean mkdirs() | 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。 |
public boolean createNewFile() | 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 |
public boolean delete() | 删除此抽象路径名表示的文件或目录。 |
public boolean renameTo(File dest) | 重新命名此抽象路径名表示的文件。 |
public String[] list() | 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 |
public File[] listFiles() | 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 |
【示例】File类其它常见功能案例
public static void main(String[] args) throws IOException {
// 1.mkdir方法使用(G盘下没有demo文件夹)
File file1 = new File("G:/demo");
if(!file1.exists()) { // 判断文件夹是够存在
file1.mkdir(); // 不存在则创建一个文件夹
}
// 2.mkdirs方法使用(G盘下没有java和demo文件夹)
File file2 = new File("G:/java/demo");
if(!file2.exists()) { // 判断文件夹是够存在
file2.mkdirs(); // 不存在则创建多个文件夹
}
// 3.createNewFile方法使用(G盘下没有abc.txt文件)
File file3 = new File("G:/abc.txt");
if(!file3.exists()) { // 判断文件是够存在
file3.createNewFile(); // 不存在则创建该文件
}
// 4.delete方法,删除文件或文件夹
file1.delete(); // 删除文件文件夹
file3.delete(); // 删除文件
// 5.renameTo方法,文件重命名
file3.renameTo(new File("G:/haha.txt"));
// 6.list方法,遍历文件和文件夹
File file4 = new File("G:");
for(String path : file4.list()) {
System.out.println(path);
}
// 7.listFiles方法,遍历目录中的文件
for(File file : file4.listFiles()) {
System.out.println(file);
}
}
5.File类的过滤器
通过 listFiles()方法,我们可以获取到一个目录下的所有文件和文件夹,但能不能对其进行过滤呢?比如我们只想要一个目录下的指定扩展名的文件,或者包含某些关键字的文件夹呢?
我们是可以先把一个目录下的所有文件和文件夹获取到,并遍历当前获取到所有内容,遍历过
程中在进行筛选,但是这个动作有点麻烦,Java 给我们提供相应的功能来解决这个问题。
查阅 File 类的 API,在查阅时发现 File 类中重载的 listFiles 方法,并且接受指定的过滤器。
【示例】获取扩展名为.java所有文件
//自定类继承 FilenameFilter过滤器接口
class MyFilenameFilter implements FilenameFilter {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
}
// 测试类
public class FileDemo {
// 获取扩展名为.java所有文件
public static void main(String[] args) {
// 创建 File 对象
File file = new File("C:\\Users\\Administrator\\Desktop\\Java");
// 获取指定扩展名的文件
File[] files = file.listFiles(new MyFilenameFilter());
// 遍历获取到的所有符合条件的文件
for (File f : files) {
System.out.println(f.getName());
}
}
}
在查阅 API 时,我们发现,在 listFiles(FileFilter filter) 也可以接受一个 FileFilter 过滤器,它和我们讲的 FilenameFilter 有啥区别呢?
FilenameFilter 过滤器中的 accept 方法接受两个参数,一个当前文件或文件夹所在的路径,一个是当前文件或文件夹对象的名称。
FileFilter 过滤器中的 accept 方法接受一个参数,这个参数就当前文件或文件夹对象。
当我们需要过滤文件名称时就可以使用 FilenameFilter 这个过滤器,当我们想对当前文件或文件
夹进行过滤,就可以使用 FileFilter ,比如需要当前目录下的所有文件夹,就可以使用 FileFilter 过滤器。
【示例】获取指定目录下的文件
//自定类继承 FileFilter过滤器接口
class MyFileFilter implements FileFilter {
@Override
public boolean accept(File pathname) {
return pathname.isFile();
}
}
// 测试类
public class FileDemo {
// 获取指定目录下的文件(排除文件夹)
public static void main(String[] args) {
// 创建 File 对象
File file = new File("C:\\Users\\Administrator\\Desktop\\Java");
// 获取指定目录下的文件
File[] files = file.listFiles(new MyFileFilter());
// 遍历获取到的所有符合条件的文件
for (File f : files) {
System.out.println(f.getName());
}
}
}
ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。