File
- 文件就是持久保持数据的存储单元,任何数据如果需要持久保存,就需要存储到文件中
- java.io.File 用于表示文件(目录),也就是说程序员可以通过File类在程序中操作硬盘上的文件和目录。
- File API的方法可以实现:创建文件/文件夹,查看文件的属性,删除文件/文件夹,文件/文件夹改名等
- 关于路径的表示,可以用“/” “\”或是Files.separator
File内的方法
- mkdir();创建文件夹
- mkdirs();创建多个文件夹
- createNewFile();创建文件
- delete()删除文件或者文件夹
注意:删除的若是文件夹,必须是空文件夹才能删除 - **注意:上述的方法都是有布尔型返回值的,成功返回true,否则返回false,即可以放在if语句中作为条件,当作为条件执行过后,其创建或删除等操作也已经执行过了
- 当创建文件时需要抛出异常:throws IOExpression,所属包: java.io.IOExpression
- isDirectory()判断是否是文件夹,当是的时候返回true,否则返回false
- isFile()判断是否是文件,当是的时候返回true,否则返回false
- exists()判断文件(夹)是否已存在
- listFiles()文件夹的方法,列出文件夹内所有的文件和文件夹,返回值是一个File[]数组类型,元素是该文件夹里的内容
语法:
public static void main(String[] args) throws IOExpression{//需要抛出异常
File file1 = new File("/home/soft01/demo");//在/home/soft01(已存在)目录下,新建demo(没有同名文件夹)文件夹
file1.mkdir();//新建文件夹,返回值是个boolean类型,若创建成功,返回true,否则false。
if(file1.exists()){
file1.delete();//删除文件夹
}
file1 = new File("/home/soft01/demo/a/b/c/d");
file1.isDirectory();//file1是文件夹,返回true
file1.isFile();//返回false
file1.mkdirs();//会依次创建demo,a,b,c,d
File file2 = new File("/home/soft01/demo/test.txt");//在这个目录下新建test.txt文件
file2.createNewFile();
}
小案例:删除一个文件夹,其内部有若干层嵌套的文件夹,每个文件夹都有文件
public class Test {
public static void main(String[] args) {
File dir = new File("./demo");
delete(dir);
}
public static void delete(File file){
if(file.isDirectory()){
//先将该目录中所有子项清空
File[] subs = file.listFiles();
for(int i=0;i<subs.length;i++){
File sub = subs[i];
/*
* 递归调用
* 在当前方法内部继续调用本方法的
* 现象称为递归调用.
* 递归尽量避免使用,层级越多开销
* 越大,执行效率较慢.
* 若需要使用递归,必须注意两点:
* 1:尽量避免层级太多
* 2:递归调用必须被一个分支控制
* 不能必定调用,否则是死循环.
*/
delete(sub);
}
}
file.delete();
}
}
FileFilter(java.io.FileFilter)
文件过滤
public static void main(String[] args) {
File dir = new File(".");
/*
* 文件过滤器,用于定义一个File的过滤规则
*/
FileFilter filter = new FileFilter(){
/*
* 当参数file符合过滤要求时,当前accept方法
* 应当返回true
*/
public boolean accept(File file) {
String name = file.getName();
System.out.println("正在过滤:"+name);
return name.startsWith(".");
}
};
/*
* 该方法会将目录中所有子项获取到,并顺序调用
* 给定的过滤器的accept方法,然后将所有返回
* 值为true的子项保留并最终返回.
*/
File[] subs = dir.listFiles(filter);
System.out.println(subs.length);
for(int i=0;i<subs.length;i++){
File sub = subs[i];
System.out.println(sub.getName());
}
}