- 访问文件或目录的属性信息,如:名字、大小、修改时间等
- 创建和删除文件和或目录
- 访问一个目录中的子项
获取文件信息
import java.io.File;
import java.io.IOException;
public class Practice1 {
public static void main(String[] args) throws IOException {
File file = new File("demo.txt");
String name = file.getName(); //获取文件名字
long len = file.length(); //文件大小(字节为单位)
boolean cw = file.canWrite(); //是否可写(只读模式下不可写)
boolean cr = file.canRead(); //是否可读(文件如果隐藏则不可读)
boolean ih = file.isHidden(); //是否隐藏(与canRead()相反
}
}
创建文件
createNewFile()方法
public class Practice2 {
public static void main(String[]args) throws IOException {
File dir = new File("./demo.txt");
if (dir.exists()){
System.out.println("文件已存在");
}else{
dir.createNewFile();
System.out.println("文件已创建");
}
}
}
创建目录
mkdirs()方法
File dir = new File("./a/b/c/d"); //"./"表示当前目录下,也可以省略
if (dir.exists()){
System.out.println("该目录已存在!");
}else{
dir.mkdirs();
System.out.println("目录已创建");
}
删除文件或目录
exists()方法
delete()方法
当删除目录时目录需为空
File file = new File("test.txt");
if (file.exists()){
file.delete();
System.out.println(file.getName()+"已删除");
}else{
System.out.println("文件/目录不存在!");
}
获取目录中子项的名字
listFiles()方法
isDirectory()方法
public static void main(String[]args){
File dir = new File(".");
if (dir.isDirectory()){
File[] files = dir.listFiles();
for (File file:files){
System.out.println(file);
}
}else {
System.out.println("目录不存在!");
}
}
获取目录中符合条件的子项
重载listFiles方法,添加过滤器
@[TOC](public static void main(String[]args){
File dir = new File(".");
if (dir.isDirectory()){
File[] subs = dir.listFiles( //创建匿名内部类
new FileFilter() { //创建过滤器
@Override
public boolean accept(File pathname) {
return
pathname.getName().startsWith("."); //名字是否以"."开始
}
}
);
System.out.println(subs.length);
}
})
用递归方法删除含有多级子项的目录
自己调用自己
package demo130;
import java.io.File;
import java.io.FileFilter;
public class Practice1 {
public static void main(String[]args){
File dirs = new File("./a");
Delete(dirs);
}
public static void Delete(File dir){
if (dir.isDirectory()) {
File[] arr = dir.listFiles();
for (File sub : arr) {
Delete(sub);
}
}
dir.delete();
}
}
过滤器使用的三种方式
Lamda表达式可以用更精简的方法创建匿名内部类,但实现的接口只能有一个抽象方法,否则无法使用
public static void main(String[]args){
FileFilter filter1 = new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().startsWith(".");
}
};
FileFilter filter2 = (File file)->{return file.getName().startsWith("."); };
FileFilter filter3 = file->file.getName().startsWith(".");
}