File类有两个字段比较常用
字段:被public static 修饰,类似常量但不是常量
separator:文件分隔符,同一个路径中不同文件之间使用
pathSeparator:路径分隔符,是两个不同路径之间使用
File过滤器
注意:过滤器用在list()获取文件夹下所有文件名,或者listFiles()获取文件夹下所有文件对象
list():使用FilenameFilter
listFiles():使用FilenameFilter和FileFilter
实现过滤代码示例:
public class 的 {
public static void main(String[] args) {
String s1 = "./io";
File file = new File(s1,"1.txt");
//构造方法
MyFilenameFilter m1 = new MyFilenameFilter(".java");
//set方法
m1.setString(".txt");
String[] list = file.list(m1);
//---------------------
MyFileFilter m2 = new MyFileFilter(".java");
file.listFiles(m2);
File file2 = new File(s1 , "2.txt");
//---------------------
//匿名对象实现类
File[] listFiles = file2.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".java");
}
});
}
}
实现FilenameFilter过滤器部分代码
public class MyFilenameFilter implements FilenameFilter {
private String string;
public MyFilenameFilter(String string) {
super();
this.string = string;
}
public void setString(String string) {
this.string = string;
}
public boolean accept(File dir, String name) {
return name.endsWith(string);
}
}
实现FileFilter过滤器部分代码
public class MyFileFilter implements FileFilter{
private String s1;
public MyFileFilter(String s1) {
super();
this.s1 = s1;
}
public void setS1(String s1) {
this.s1 = s1;
}
public boolean accept(File pathname) {
return pathname.getName().endsWith(s1);
}
}
注意:可以使用匿名对象实现类,构造方法,set方法,要实现FileFilter或者FilenameFilter
删除文件夹操作
思考:先进行安全性操作,之后如果遇到文件夹就再次遍历
代码示例:
private static boolean delete1(File target) {
//如果文件存在,返回false,但是后面isFile()已经判断了文件是否存在
if (target == null) {
return false;
}
if (!target.exists()) {
return false;
}
if (target.list().length == 0){
return target.delete();
}
if (target.isFile()) {
return target.delete();
}
//在这里避免了一种target为null的情况,这里有可能出现内存不够用的情况
try {
for (File file: target.listFiles()) {
if (file.isDirectory()) {
delete1(file);
}else {
file.delete();
}
}
} catch (Exception e) {
return false;
}
return target.delete();
}