Java io.File学习笔记

2017-05-19  本文已影响13人  smmtest
//File里一些常用的功能、注意文件与文件夹的区分
        File file=new File("F:\\test");
        System.out.println("文件大小"+file.length());
        System.out.println("文件/文件夹上层路径"+file.getParent());
        System.out.println("文件/文件夹名字"+file.getName());
        System.out.println("文件/文件夹是否存在"+file.exists());
        System.out.println("是不是文件并且存在?"+file.isFile());
        System.out.println("是不是文件夹并且存在?"+file.isDirectory());
        System.out.println("能不能删除?如果存在则删除"+file.delete());

        //mkdirs的区别是如果父路径也不存在则带着父路径一起创建,创建的是文件夹,就算文件夹名有后缀,也是文件夹
        System.out.println("是否能创建文件夹(如果存在就是false)"+file.mkdir());
        File filemk=new File("F:\\test\\aaa\\bbb.txt");
        filemk.mkdirs();

        //createNewFile创建的是文件,并且父路径需要存在,要不然会报找不到路径的错误
        File file2=new File("F:\\1.txt");
        try {
            System.out.println("是否能创建文件(如果存在就是false)"+file2.createNewFile());
        } catch (IOException e) {
            e.printStackTrace();
        }

        //输出该目录下所有文件和文件夹
        File file3=new File("F:\\test");
        File[] files=file3.listFiles();//还有其他两种带参数的方法
        System.out.println(file3.getName()+"目录下有以下文件和文件夹:");
        for (int i=0;i<files.length;i++){
            System.out.println(files[i].getName()+"是否隐藏"+files[i].isHidden());
        }

        //通过文件过滤接口筛选文件,实现accept方法,匿名内部类
        //.list()源码中有判断accept()的值,所以需要自己实现修改
        //FileFilter也是具有筛选功能的接口,参数不同
        String[] files2=file3.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(".iml");
            }
        });
        //files2中已经是所有.iml文件的数组了
        System.out.println("后缀名为iml的文件如下:");
        for (int i=0;i<files2.length;i++){
            System.out.println(files2[i]);
        }

小例子:
输出某个文件夹下面所有子孙文件
并且按一定的阶层排序


    private static int level=0;//设定层级的等级,之后分层会用到

    //参数传入File类型
    public static void xxx(File file){
        File[] files=file.listFiles();
        //遍历实参
        for (File subFile:files){
            //判断该层级下的文件类型
            //是否是隐藏文件
            if (subFile.isHidden()){
                System.out.print("");
            }
            //是否是文件
            else if (subFile.isFile()){
                StringBuffer stringBuffer=new StringBuffer();
                //调用自定义方法
                stringBuffer.append(appendTab());
                stringBuffer.append(subFile.getName());
                System.out.println(stringBuffer);
            }
            //是否是文件夹
            else if (subFile.isDirectory()){
                StringBuffer stringBuffer=new StringBuffer();
                stringBuffer.append(appendTab());
                 //如果是文件夹,就让level+1,因为要到下个层级去了
                level++;
                stringBuffer.append(subFile.getName());
                //文件夹后面加上\以区分
                stringBuffer.append("\\");
                System.out.println(stringBuffer);
                //递归自身,当判断为文件夹时,就再次进入方法继续做判断输出
                xxx(subFile);
                //结束递归后,就等于返回到了之前的层
                //级,需要将level减少,要不然同层级的文
                //件会混乱
                level--;
            }
        }
    }

    //控制子孙文件前输出多少个tab
    public static String appendTab(){
        StringBuffer stringBuffer=new StringBuffer();
        for (int i=1;i<=level;i++){
            stringBuffer.append("\t");
        }
        return stringBuffer.toString();
    }

结果:

![5]~0G26}U0}P05_ZR]M1Z8D.png](https://img.haomeiwen.com/i4428722/ab1e3ab275cf3e91.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

上一篇下一篇

猜你喜欢

热点阅读