File的常见成员方法(所有获取并遍历的方法)

一.File的常见成员方法(获取并遍历):


二.代码实现:

1.listRoots()方法(返回File数组):获取系统中所有的盘符-->该方法在遍历硬盘时可以用

package com.itheima.a01myfile;
​
import java.io.File;
import java.util.Arrays;
​
public class FileDemo7 {
    public static void main(String[] args) {
        //1.listRoots方法:获取系统中所有的盘符
        File[] arr = File.listRoots();
        /* listRoots方法是静态的,直接类名.方法名即可调用,
           该方法返回一个数组
         */
        System.out.println(Arrays.toString(arr));//运行结果为[C:\, D:\]
        //Arrays.toString(arr)代表把arr数组转换为字符串
    }
}

2.list()方法:获取当前该路径下所有内容(返回String数组)-->仅仅能获取名字:文件是获取文件名加后缀,文件夹是获取文件夹名

package com.itheima.a01myfile;
​
import java.io.File;
​
public class FileDemo7 {
    public static void main(String[] args) {
        /*2.list方法:获取当前该路径下所有内容
            -->仅仅能获取名字:文件是获取文件名加后缀,文件夹是获取文件夹名
        */
         //该方法返回字符串
        File f1=new File("D:\\JavaTest");
        String[] arr2 = f1.list();
        for (String s : arr2) {
            System.out.println(s);
        }
    }
}

运行结果:


3.list(FilenameFilter filter)方法(返回String数组)-->利用文件名过滤器获取当前该路径下所有内容:

注:FilenameFilter为函数式接口,可以用匿名内部类,也可以改为Lambda表达式,如果有合适的方法还可以用方法引用

package com.itheima.a01myfile;
​
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
​
public class FileDemo7 {
    public static void main(String[] args) {
        /*3.list(FilenameFilter filter)方法
           -->利用文件名过滤器获取当前该路径下所有内容
        */
        File f2=new File("D:\\JavaTest");
        String[] arr3 = f2.list(new FilenameFilter() {
            /*accept方法的形参,依次表示JavaTest文件夹里面每一个文件或者文件夹的路径
               参数一:父级路径
               参数二:子级路径
               返回值:如果返回值为true,就表示当前路径保留
                     如果返回值为false,就表示当前路径舍弃不要
             */
            @Override
            public boolean accept(File dir, String name) {
                return false;
            }
        });
​
        System.out.println(Arrays.toString(arr3));//运行结果为[]
    }
}
​
package com.itheima.a01myfile;
​
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
​
public class FileDemo7 {
    public static void main(String[] args) {
        /*3.list(FilenameFilter filter)方法
           -->利用文件名过滤器获取当前该路径下所有内容
        */
        File f2=new File("D:\\JavaTest");
        String[] arr3 = f2.list(new FilenameFilter() {
            /*accept方法的形参,依次表示JavaTest文件夹里面每一个文件或者文件夹的路径
               参数一:父级路径
               参数二:子级路径
               返回值:如果返回值为true,就表示当前路径保留
                     如果返回值为false,就表示当前路径舍弃不要
             */
            @Override
            public boolean accept(File dir, String name) {
                return true;
            }
        });
​
        System.out.println(Arrays.toString(arr3));
        //运行结果为[a.txt, b.txt, ddd, ggg, JavaTest]
    }
}

package com.itheima.a01myfile;
​
import java.io.File;
import java.io.FilenameFilter;
​
public class FileDemo7 {
    public static void main(String[] args) {
        /*3.list(FilenameFilter filter)方法
           -->利用文件名过滤器获取当前该路径下所有内容
        */
        //需求:我现在要获取D:\JavaTest文件夹里面的所有后缀为txt的文件
        File f2=new File("D:\\JavaTest");
        String[] arr3 = f2.list(new FilenameFilter() {
            /*accept方法的形参,依次表示JavaTest文件夹里面每一个文件或者文件夹的路径
               参数一:父级路径
               参数二:子级路径
               返回值:如果返回值为true,就表示当前路径保留
                     如果返回值为false,就表示当前路径舍弃不要
             */
            @Override
            public boolean accept(File dir, String name) {
                File src=new File(dir,name);//该语句代表拼接出文件对象
                System.out.println(src);
                return true;
            }
        });
    }
}

运行结果为:


但上述代码没有实现需求获取D:\JavaTest文件夹里面的所有后缀为txt的文件:
解答如下:

法一:

package com.itheima.a01myfile;
​
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
​
public class FileDemo7 {
    public static void main(String[] args) {
        /*3.list(FilenameFilter filter)方法
           -->利用文件名过滤器获取当前该路径下所有内容
        */
        //需求:我现在要获取D:\JavaTest文件夹里面的所有后缀为txt的文件
        File f2=new File("D:\\JavaTest");
        String[] arr3 = f2.list(new FilenameFilter() {
            /*accept方法的形参,依次表示JavaTest文件夹里面每一个文件或者文件夹的路径
               参数一:父级路径
               参数二:子级路径
               返回值:如果返回值为true,就表示当前路径保留
                     如果返回值为false,就表示当前路径舍弃不要
             */
            @Override
            public boolean accept(File dir, String name) {
                File src=new File(dir,name);//该语句代表拼接出文件对象
                /*由于获取的是文件,需要先判断是否为文件,
                  还必须要满足文件后缀为.txt*/
                if(src.isFile() && name.endsWith(".txt")){
                    return true;
                }else {
                    return false;
                }
​
            }
        });
​
        System.out.println(Arrays.toString(arr3));//运行结果为[a.txt, b.txt]
​
    }
}

上述代码优化:

package com.itheima.a01myfile;
​
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
​
public class FileDemo7 {
    public static void main(String[] args) {
        /*3.list(FilenameFilter filter)方法
           -->利用文件名过滤器获取当前该路径下所有内容
        */
        //需求:我现在要获取D:\JavaTest文件夹里面的所有后缀为txt的文件
        File f2 = new File("D:\\JavaTest");
        String[] arr3 = f2.list(new FilenameFilter() {
            /*accept方法的形参,依次表示JavaTest文件夹里面每一个文件或者文件夹的路径
               参数一:父级路径
               参数二:子级路径
               返回值:如果返回值为true,就表示当前路径保留
                     如果返回值为false,就表示当前路径舍弃不要
             */
            @Override
            public boolean accept(File dir, String name) {
                File src = new File(dir, name);//该语句代表拼接出文件对象
                /*由于获取的是文件,需要先判断是否为文件,
                  还必须要满足文件后缀为.txt*/
                return src.isFile() && name.endsWith(".txt");//代表只返回是文件且后缀为.txt
            }
        });
​
        System.out.println(Arrays.toString(arr3));//运行结果为[a.txt, b.txt]
​
    }
}

其中用到了方法endsWith(该方法属于String类),本例中就是让子级路径的后缀为.txt

法二:利用正则表达式

直接用listFiles方法获取该路径下的所有内容(返回File数组),但最后却无法与正则表达式应用

用list方法获取该路径下的所有内容(返回String数组),但最后却无法判断该字符串表示的是否为文件,大大降低了精准度。

因此正则表达式用不了

法三:

package com.itheima.a01myfile;
​
import java.io.File;
​
public class FileDemo8 {
    public static void main(String[] args) {
        //1.创建File对象
        File f=new File("D:\\JavaTest");
​
        //需求:打印该路径下所有后缀为.txt的文件
​
        //2.获取该路径下的所有内容
        /* 注:要用listFiles,因为只有该方法才能把该路径下的所有内容获取出来,
           而list方法:获取当前该路径下所有内容-->仅仅能获取名字,意义不大
         */
        File[] arr = f.listFiles();
​
        //3.遍历路径里的内容进行判断输出
        for (File file : arr) {
            //file依次表示JavaTest文件夹里面的每一个文件或者文件夹的路径
            if(file.isFile() && file.getName().endsWith(".txt")){
                /* file.isFile()表示判断是否为文件,
                   file.getName()代表获取文件(不是文件夹)的名称,带后缀,
                   .endsWith(".txt")代表名称后缀需要是.txt才行
                 */
                System.out.println(file);
            }
        }
        /*运行结果为:
            D:\JavaTest\a.txt
            D:\JavaTest\b.txt
         */
    }
}

4.listFiles(FileFilter filter)方法(返回File数组)-->利用文件名过滤器获取当前该路径下所有内容:

注:FileFilter为函数式接口,可以用匿名内部类,也可以改为Lambda表达式,如果有合适的方法还可以用方法引用

package com.itheima.a01myfile;
​
import java.io.File;
import java.io.FileFilter;
import java.util.Arrays;
​
public class FileDemo9 {
    public static void main(String[] args) {
        //1.创建File对象
        File f=new File("D:\\JavaTest");
​
        //2.调用listFiles方法
        File[] arr = f.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                //形参表示依次表示文件夹下的每一个文件或者文件夹的路径
                /*返回值就是看当前的路径是否保留:
                  返回true则保留,保留到listFiles方法返回的数组里
                  返回false则舍弃*/
                return false;
            }
        });
​
        System.out.println(Arrays.toString(arr));//运行结果为[]
    }
}
package com.itheima.a01myfile;
​
import java.io.File;
import java.io.FileFilter;
import java.util.Arrays;
​
public class FileDemo9 {
    public static void main(String[] args) {
        //1.创建File对象
        File f=new File("D:\\JavaTest");
​
        //2.调用listFiles方法
        File[] arr = f.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) { //形参为完整路径
                //形参表示依次表示文件夹下的每一个文件或者文件夹的路径
                /*返回值就是看当前的路径是否保留:
                  返回true则保留,保留到listFiles方法返回的数组里
                  返回false则舍弃*/
                return true;
            }
        });
​
        System.out.println(Arrays.toString(arr));
        /*运行结果为[D:\JavaTest\a.txt, D:\JavaTest\b.txt, 
        D:\JavaTest\ddd, D:\JavaTest\ggg, D:\JavaTest\JavaTest]*/
    }
}
​
package com.itheima.a01myfile;
​
import java.io.File;
import java.io.FileFilter;
import java.util.Arrays;
​
public class FileDemo9 {
    public static void main(String[] args) {
        //1.创建File对象
        File f=new File("D:\\JavaTest");
​
        //2.调用listFiles方法
        File[] arr = f.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                //形参表示依次表示文件夹下的每一个文件或者文件夹的路径
                /*返回值就是看当前的路径是否保留:
                  返回true则保留,保留到listFiles方法返回的数组里
                  返回false则舍弃*/
                return pathname.isFile() && pathname.getName().endsWith(".txt");
                //此时返回的是后缀为.txt的文件,结果为true则保留,结果为false则舍弃
            }
        });
​
        System.out.println(Arrays.toString(arr));
        /*运行结果为[D:\JavaTest\a.txt, D:\JavaTest\b.txt]*/
    }
}

5.listFiles(FilenameFilter filter)方法(返回File数组)-->利用文件名过滤器获取当前该路径下所有内容:

注:FilenameFilter为函数式接口,可以用匿名内部类,也可以改为Lambda表达式,如果有合适的方法还可以用方法引用

package com.itheima.a01myfile;
​
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
​
public class FileDemo10 {
    public static void main(String[] args) {
        //1.创建File对象
        File f=new File("D:\\JavaTest");
​
        //2.调用
        File[] arr = f.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                //第一个形参是父级路径,第二个形参是子级路径(相当于把完整的路径拆成父级和子级两部分)
                /* 本例中D:\JavaTest为父级路径,其中ggg为一个子级路径
                  父级路径加上子级路径就是一个完整的路径
                 */
                File src = new File(dir, name);
                return src.isFile() && name.endsWith(".txt");
                /*return src.isFile() && src.getName().endsWith(".txt");也行
                  但形参里已经有子级路径且为字符串,直接用name.endsWith(".txt");更简洁
                 */
            }
        });
​
        System.out.println(Arrays.toString(arr));
        //运行结果为[D:\JavaTest\a.txt, D:\JavaTest\b.txt]
    }
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值