File类,递归
Posted lzw123-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了File类,递归相关的知识,希望对你有一定的参考价值。
File类
File文件和目录路径名的抽象表示形式。即,Java中把文件或者目录(文件夹)都封装成File对象。
File类包含
路径 path E:...
目录 directory 文件夹
文件 file
File类的成员变量
例子:
// 名称分隔符 System.out.println(File.pathSeparator);//win ; linux : // 路径分隔符 System.out.println(File.separator);//win linux /
File类的构造方法
File类构造方法不会检验文件是否存在
创建File对象
例子:
//1 File file=new File("e:\\test\\a.txt"); //2 File file=new File("e:","a.txt");//灵活性高, //3 File f1=new File("d:\\test"); File file=new File(f1,"a.txt");//灵活性更高
File类的获取
//获取绝对路径 public static void method3(){ //File file=new File("d:\\test\\a.txt"); //File file=new File("src"); File file=new File("abc"); //相对路径走的是本工程路径 System.out.println(file.getAbsolutePath()); }
public static void method4(){ //获取本路径目录名或者文件名 File file=new File("d:\\codetool\\jdk1.8.zip"); System.out.println(file.getName()); //getPath()和toString()一个作用 System.out.println(file.getPath()); //返回文件的长度long(字节数)检测空间大小,不是容量大小 System.out.println(file.length()); }
文件或文件夹的创建删除与测试
public static void methd4() throws IOException{ //创建文件,只能创建文件,不能创建文件夹 File f1=new File("e:\\test\\c"); System.out.println(f1.createNewFile()); }
public static void methd5() throws IOException{ //创建文件夹,只能创建文件夹,不能创建文件 File f1=new File("e:\\test\\d"); System.out.println(f1.mkdir());//单级目录,false File f2=new File("e:\\test\\d\\aaa.txt"); System.out.println(f2.mkdirs());//多级目录,true // mkdirs创建多级目录 }
public static void method7(){ //删除文件或文件夹 //直接从硬盘上删除,不走回收站, //删除需谨慎
//删除目录时,如果目录中有内容,无法直接删除。
//只有将目录中的内容都删除后,保证该目录为空。这时这个目录才可以删除
File file=new File("d:\\test\\aaa.txt");
boolean flag=file.delete(); System.out.println(flag); }
public static void methd7(){ File f1=new File("e:\\test\\a.txt"); System.out.println(f1.exists());//判断文件或文件夹是否存在 //判断是否是文件 System.out.println(f1.isFile()); //判断是否是文件夹 File f2=new File("e:\\test"); System.out.println(f2.isDirectory()); }
listFiles()方法
例子:
public static void method9(){ File file =new File("e:\\test"); String[] files =file.list();//获取路径下所有的文件或者文件夹的字符串名称 for(String s:files){ File f1=new File(file,s); if(f1.getName().equals("a.txt")){ f1.delete(); } } }
public static void method10(){ File file =new File("e:\\test"); File[] files =file.listFiles(); for(File s:files){ System.out.println(s); } }
结果演示:
e: est.txt
e: estc
e: estc.TXT
e: estd
注意: 在获取指定目录下的文件或者文件夹时必须满足下面两个条件
1,指定的目录必须是存在的,
2,指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException
文件过滤器
listFiles()方法,空参时,全部显示
有参数时,
FileFilter实现此接口的实例就可过滤文件名
该接口有accept方法
自定义类继承该接口
public class MyFilter implements FileFilter { public boolean accept(File pathname) { /*String name=pathname.getName().toLowerCase();//先转字符串,再转小写 boolean flag=name.endsWith(".txt");//查找以什么结尾 return flag;*/ //如果是文件夹,则不过滤,加到File数组中 if(pathname.isDirectory()){ return true; } return pathname.getName().toLowerCase().endsWith(".xml"); } }
测试类:
public static void main(String[] args) { File file =new File("e:\\test"); File[] files=file.listFiles(new MyFilter()); //listFiles方法在获取路径时调用accept方法,并将路径传入, //如果该方法返回true,那么该文件对象放入File数组,如果是false,则不放入 //遍历获取到的所有符合条件的文件 for(File f:files){ System.out.println(f); } }
递归
递归,指在当前方法内调用自己的这种现象
如:
public void method(){ System.out.println(“递归的演示”); //在当前方法内调用自己 method(); }
递归参与运行的方法主体不变,而运行的方法的参数变
注意:递归必须要写一个程序的出口,否则程序无意义
递归的代码演示,计算1-n之间的和
public static void main(String[] args) { System.out.println(a(100)); } public static int a(int n){ if(n == 1){ return 1; } return n + a(n-1); } //a(100)=(100+(a(99)=99+a(98)=98+a(97)=......))
递归打印所有目录中的文件路径
public class FileDemo2 { public static void main(String[] args) { File file = new File("d:\\test"); getFileAll(file); } //获取指定目录以及子目录中的所有的文件 public static void getFileAll(File file) { File[] files = file.listFiles(); //遍历当前目录下的所有文件和文件夹 for (File f : files) { //判断当前遍历到的是否为目录 if(f.isDirectory()){ //是目录,继续获取这个目录下的所有文件和文件夹 getFileAll(f); }else{ //不是目录,说明当前f就是文件,那么就打印出来 System.out.println(f); } } } }
搜索指定目录中.java文件(包含子目录)
自定类继承FileFilter过滤器接口
public class YourFilter implements FileFilter{ public boolean accept(File pathname) { //如果是文件夹,则不进行过滤,认为满足条件加到File数组中 if(pathname.isDirectory()){ return true; } return pathname.getName().toLowerCase().endsWith(".java"); } }
测试类:
public class Demo05 { public static void main(String[] args) { File file=new File("d:\\test"); getAllFile(file); } public static void getAllFile(File file){ File[] files=file.listFiles(new YourFilter()); for(File f:files){ if(f.isDirectory()){ getAllFile(f); }else{ System.out.println(f); } } } }
以上是关于File类,递归的主要内容,如果未能解决你的问题,请参考以下文章