IO框架(九)File类、FileFilter接口、递归
IO框架(九)File类、FileFilter接口、递归
目录
Flie类
概念
- 代表物理盘符中的一个文件或者文件夹
方法
createNewFile()//创建-一个新文件
mkdir()//创建一个新目录
delete()//删除文件或空目录
exists ()//判断File对象所对象所代表的对象是否存在
getAbsolutePath()//获取文件的绝对路径
getName()//取得名字
getParent () //获取文件/目录所在的目录
isDirectory()//是否是目录
isFile()//是否是文件
length()//获得文件的长度
listFiles()//列出目录中的所有内容
renameTo()//修改文件名为
分隔符
- 路径分隔符;
- 名称分隔符\
举例1(输出分隔符)
public class Dome01 {
public static void main(String[] args) {
separator();
}
public static void separator(){
System.out.println("路径分隔符"+ File.pathSeparator);
System.out.println("名称分隔符"+File.separator);
}
}
//输出:
路径分隔符;
名称分隔符\
举例2(文件)
public class Demo02 {
public static void main(String[] args) throws Exception{
fileOpe();
}
public static void fileOpe()throws Exception {
//创建文件对象
File file=new File("D:\\file.txt");//绝对路径,在该目录下创建
File file2=new File("file2.txt");//相对路径,在本文件夹内创建
//打印路径
System.out.println(file.toString());
//检查硬盘中是否有该文件
if(!file.exists()) {
//创建文件(创建文件到硬盘上)
boolean b = file.createNewFile();
System.out.println("结果" + b);
}
//删除文件
//方式1(直接删除)
System.out.println("删除结果"+file.delete());
//方式2(使用jvm退出时删除)
file.deleteOnExit();
//获取文件信息
System.out.println("获取文件信息:"+file.getAbsolutePath());
System.out.println("获取路径:"+file.getPath());
System.out.println("获取文件名称:"+file.getName());
System.out.println("获取父目录:"+file.getParent());
System.out.println("获取文件长度:"+file.length());
System.out.println("获取文件创建时间:"+new Date(file.lastModified()).toString());//file.lastModified()为long类型,可以转换为Date类型
//判断
System.out.println("是否可写:"+file.canWrite());
System.out.println("是否是文件:"+file.isFile());
System.out.println("是否隐藏:"+file.isHidden());
}
}
举例3(文件夹)
public class Demo03 {
public static void main(String[] args) throws Exception{
directoryOpe();
}
//文件夹操作
public static void directoryOpe()throws Exception{
//创建文件夹
File dir=new File("D:\\aaa\\bbb ");
System.out.println(dir.toString());
//检查硬盘中是否有该文件夹
if(!dir.exists()) {
//创建文件(创建文件到硬盘上)
boolean b = dir.mkdir();
System.out.println("结果" + b);
}
//删除文件夹
//直接删除(只能删除空目录)
System.out.println("删除结果"+dir.delete());
//使用jvm删除
dir.deleteOnExit();
//获取文件夹信息
System.out.println("获取绝对路径:"+dir.getAbsolutePath());
System.out.println("获取路径:"+dir.getPath());
System.out.println("获取文件夹名称:"+dir.getName());
System.out.println("获取父目录:"+dir.getParent());
System.out.println("获取文件创建时间:"+new Date(dir.lastModified()).toString());//file.lastModified()为long类型,可以转换为Date类型
//判断
System.out.println("是否是文件夹:"+dir.isDirectory());
System.out.println("是否隐藏:"+dir.isHidden());
//遍历文件夹
File dir2=new File("D:\\图片");
String[] files=dir2.list();
System.out.println("----------------------");
for (String file : files) {
System.out.println(file);
}
}
}
FileFilter接口(文件过滤器)
文件过滤器
- public interface FileFilter
- boolean accept(File pathname)
作用
- 当调用File类中的listFiles()方法时,支持传入FileFilter接口接口实现类,对获取文件进行过滤,只有满足条件的文件的才可出现在listFiles()的返回值中
举例
public class Demo04 {
public static void main(String[] args) throws Exception{
directoryOpe();
}
public static void directoryOpe()throws Exception{
File dir2=new File("D:\\aaa\\bbb");
System.out.println("---------FileFilter接口的使用-----------");
File[] files2=dir2.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
//当满足后缀名为txt时,返回该文件名称
if(pathname.getName().endsWith(".txt")){
return true;
}
return false;
}
});
for (File file : files2) {
System.out.println(file);
}
}
}
//输出:
---------FileFilter接口的使用-----------
D:\aaa\bbb\1.txt
D:\aaa\bbb\安.txt
D:\aaa\bbb\张.txt
D:\aaa\bbb\李.txt
D:\aaa\bbb\王.txt
D:\aaa\bbb\赵.txt
递归
递归遍历文件夹(获得所有文件)
public class Demo05 {
public static void main(String[] args) throws Exception{
listDir(new File("D:\\aaa"));
}
public static void listDir(File dir)throws Exception{
File[] files=dir.listFiles();//得到aaa下面的所有文件和文件夹
if(files!=null&&files.length>0){
for (File file : files) {
//如果是文件夹则继续遍历,如果不是(如果是文件)就输出
if(file.isDirectory()){
listDir(file);
}else {
System.out.println(file.getAbsolutePath());
}
}
}
}
}
//输出:
D:\aaa\aas.txt
D:\aaa\bbb\1.txt
D:\aaa\bbb\安.txt
D:\aaa\bbb\张.txt
D:\aaa\bbb\李.txt
D:\aaa\bbb\王.txt
D:\aaa\bbb\赵.txt
递归删除文件夹
-
因为删除文件夹必须先删除其中的文件,所以要用到递归
-
删除aaa文件夹
public class Demo06 { public static void main(String[] args) throws Exception{ deleteDir(new File("D:\\aaa")); } public static void deleteDir(File dir)throws Exception{ File[] files=dir.listFiles();//得到aaa下面的所有文件和文件夹 //判断文件夹内是否还有东西,如果有东西则将里面的文件先删除 if(files!=null && files.length>0){ for (File file : files) { //是文件夹时递归,是文件时删除文件 if(file.isDirectory()){ deleteDir(file); }else { System.out.println("删除:"+file.getAbsolutePath()); file.delete();//删除文件 } } } //将aaa里面的文件都删除之后再执行删除aaa的操作 System.out.println("删除"+dir.getAbsolutePath()); dir.delete(); } } //输出: 删除:D:\aaa\aas.txt 删除:D:\aaa\bbb\1.txt 删除:D:\aaa\bbb\安.txt 删除:D:\aaa\bbb\张.txt 删除:D:\aaa\bbb\李.txt 删除:D:\aaa\bbb\王.txt 删除:D:\aaa\bbb\赵.txt 删除D:\aaa\bbb 删除D:\aaa\ccc 删除D:\aaa\ddd 删除D:\aaa

浙公网安备 33010602011771号