知识概要
1.File类简介
File 文件对象
定义:文件和目录路径名的抽象表示(文件或者文件夹的抽象表示),既可以是文件也可以是路径;
- 4种构造函数:
构造函数 | 描述 |
---|---|
File(File parent,String child) | 从父抽象路径名和子路径名 字符串创建新的File实例 |
File(String pathname) | 通过将给定的路径名字字符串转换为抽象路径名来创建新的File实例 |
File(String parent,String child) | 从父路径名字字符串和子路径名字符串创建新的File实例 |
File(URI uri) | 通过将给定的 file: URI转换为抽象路径名来创建新的 File实例 |
- 构造函数的使用:
package cn.tedu.file;
import java.io.File;
import java.io.IOException;
public class Constructor {
public static void main(String[] args) throws IOException {
// 前三种构造函数的使用
File file1 = new File("E:/Test/hello");
File file2 = new File(file1, "hello2");
File file3 = new File("E:/Test/", "hello3");
}
}
- 理解误区:
1.File file1 = new File("E:/Test/hello"); 构造一个file对象,至于这个file存不存在就不知道了,可用exits()方法验证。
2. File file1 = new File("E:/Test/hello.text"); 构造一个file对象,并不一定是文件,也有可能是目录;它取决于创建语句是
file1.createNewFile(); 还是 file1.mkdir(); 前者创建的是文件,后者创建的是目录;
- 路径表示细节(容易出错)
1.window下使用正斜杠(/)为分隔符,也可使用反斜杠(但是一定得成双使用,因为‘\’是转移符)
2.linux 下默认正斜杠(/)
3.File.separator表示一个斜杠,与系统相关的斜杠
4.注意:目录路径中的冒号一定要是英文冒号,所有的都是英文状态的符号
举例:
File file1 = new File("E:\\Test\\hello");
File file2 = new File("E:/Test/hello2");
File file3 = new File("E:"+File.separator+"Test"+File.separator+"hello2");
file1.mkdir();
2.File类方法
常用方法 JAVA API帮助文档
Methods | Type | Description |
---|---|---|
canRead() | boolean | 测试应用程序是否可以读取由此抽象路径名表示的文件 |
canWrite() | boolean | 测试应用程序是否可以修改由此抽象路径名表示的文件 |
createNewFile() | boolean | 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件 |
delete() | boolean | 删除由此抽象路径名表示的文件或目录 |
exists() | boolean | 测试此抽象路径名表示的文件或目录是否存在 |
getAbsolutePath() | String | 返回此抽象路径名的绝对路径名字符串 |
getName() | String | 返回由此抽象路径名表示的文件或目录的名称 |
getPath() | String | 将此抽象路径名转换为路径名字符串 |
isAbsolute() | boolean | 测试这个抽象路径名是否是绝对的 |
isDirectory() | boolean | 测试此抽象路径名表示的文件是否为目录 |
isFile() | boolean | 测试此抽象路径名表示的文件是否为普通文件 |
isHidden() | boolean | 测试此抽象路径名命名的文件是否为隐藏文件 |
lastModified() | long | 返回此抽象路径名表示的文件上次修改的时间 |
length() | long | 返回由此抽象路径名表示的文件的长度 |
listFiles() | File[ ] | 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件 |
listFiles(FileFilter filter) | File[ ] | 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录 |
mkdir() | boolean | 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录 |
renameTo(File dest) | boolean | 重命名由此抽象路径名表示的文件 |
setReadable(boolean readable) | boolean | 一种方便的方法来设置所有者对此抽象路径名的读取权限 |
setReadOnly() | boolean | 标记由此抽象路径名命名的文件或目录,以便只允许读取操作 |
setWritable(boolean writable) | boolean | 一种方便的方法来设置所有者对此抽象路径名的写入权限 |
toString() | String | 返回此抽象路径名的路径名字符串 |
没有列举所有方法,大部分用得着的方法都有;
3.对文件的各种操作
package cn.tedu.file;
import java.io.File;
import java.io.IOException;
import java.util.Date;
public class file {
public static void main(String[] args) throws IOException {
File file = new File("E:\\Test\\hello.text");
file.createNewFile();
//测试file
System.out.println(file.exists());
System.out.println(file.isFile());
System.out.println(file.isDirectory());
System.out.println(file.isHidden());
System.out.println(file.isAbsolute());
System.out.println(file.canRead());
System.out.println(file.canWrite());
//操作file
System.out.println(file.getName());
System.out.println(file.getPath());
System.out.println(file.getAbsolutePath());
System.out.println(file.setReadable(true));
System.out.println(file.setWritable(true));
System.out.println(file.setReadOnly());
System.out.println(new Date(file.lastModified()));
System.out.println(file.length());
System.out.println(file.delete());
}
}
4.文件过滤器
listFiles(FileFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录
通过一个练习学习文件过滤器:
题目:查询工程项目下任意一个包下.java结尾的文件,输出相关信息
用三种方法实现:
Method1:遍历过滤
package com.hbeu.file;
/*
* 练习:查询包cn.tedu.file下.java结尾的文件,输出相关信息
* 1).封装文件目录 path:D:/workplace/eclipes/workspace/day_5-31/src/com/hbeu/file
* 2).获取目录下所有的文件
* 3).遍历判断是不是java文件
* 是不是文件,是不是java文件
*
* File[] listFiles() 获取当前文件夹下所有的文件对象(File类的所有方法)
* String[] list() 获取当前文件夹下所有的文件名字 (String类的所有方法)demo.java
*
* 文件过滤器:
* FileFileter
*/
import java.io.File;
public class test {
public static void main(String[] args) {
// 1.封装文件目录 path:C:\Users\jkx\workspace\basic\src\cn\tedu\exce
File f1 = new File("D:/workplace/eclipes/workspace/day_5-31/src/com/hbeu/file");
File[] arr = f1.listFiles();
for (int i = 0; i < arr.length; i++) {
if (arr[i].isFile() && arr[i].getName().endsWith(".java")) {
System.out.println(arr[i].getAbsolutePath());
}
}
}
}
Method2:用Filel类方法(过滤器)过滤
package com.hbeu.file;
/*
* 练习:查询包cn.tedu.file下.java结尾的文件,输出相关信息
* 1).封装文件目录 path:D:/workplace/eclipes/workspace/day_5-31/src/com/hbeu/file
* 2).获取目录下所有的文件
* 3).遍历判断是不是java文件
* 是不是文件,是不是java文件
*
* File[] listFiles() 获取当前文件夹下所有的文件对象(File类的所有方法)
* String[] list() 获取当前文件夹下所有的文件名字 (String类的所有方法)demo.java
*
* 文件过滤器:
* FileFileter
*/
import java.io.File;
import java.io.FileFilter;
public class test {
public static void main(String[] args) {
File f1 = new File("D:/workplace/eclipes/workspace/day_5-31/src/com/hbeu/file");
File[] arr = f1.listFiles(new FileFilter(){
@Override
public boolean accept(File arg0) {
return arg0.isFile() && arg0.getName().endsWith(".java");
}});
for (int i = 0; i < arr.length; i++)
System.out.println(arr[i].getAbsolutePath());
}
}
Method3:用Filel类方法(自定义过滤器)过滤
package com.hbeu.file;
/*
* 练习:查询包cn.tedu.file下.java结尾的文件,输出相关信息
* 1).封装文件目录 path:D:/workplace/eclipes/workspace/day_5-31/src/com/hbeu/file
* 2).获取目录下所有的文件
* 3).遍历判断是不是java文件
* 是不是文件,是不是java文件
*
* File[] listFiles() 获取当前文件夹下所有的文件对象(File类的所有方法)
* String[] list() 获取当前文件夹下所有的文件名字 (String类的所有方法)demo.java
*
* 文件过滤器:
* FileFileter
*/
import java.io.File;
import java.io.FileFilter;
public class test {
public static void main(String[] args) {
File f1 = new File("D:/workplace/eclipes/workspace/day_5-31/src/com/hbeu/file");
File[] arr = f1.listFiles(new OurFileFilter(".java"));
for (int i = 0; i < arr.length; i++)
System.out.println(arr[i].getAbsolutePath());
}
}
class OurFileFilter implements FileFilter {
private String msg;
public OurFileFilter(String msg) {
this.msg = msg;
}
@Override
public boolean accept(File pathname) {
return pathname.isFile() && pathname.getName().endsWith(msg);
}
}
推荐第三种方法,真正做到了一次编写,多处使用!看看method2和method3的区别,就能明白文件过滤器的原理了!