• IO流


    1、IO流之File类(管理文件夹与文件)

    分隔符:

     都是静态方法,所以类名.方法名
     与系统有关的路径分隔符 这是需要拼串时用到,
     win ; linux :
    System.out.println(File.pathSeparator);
    与系统有关的名称分隔符
     windows  linux /
    System.out.println(File.separator);

    windows的写法

     如何创建File类:

    构造函数:

     最常用的

         File file = new File("D:\demo0611\a.txt"); 最常用的
            System.out.println(file);
            File file2 = new File("D:\demo0611", "a.txt");
            System.out.println(file2);
            File file3=new File(new File("D:\demo0611"),"a.txt");
            System.out.println(file3);

     因为是构造方法,所以在创建时就可以传参数。

     File类的方法:

    File file=new File("D:\demo06\a.txt");
            String abpath=file.getAbsolutePath();
            System.out.println(abpath);
            //获取文件名 //自动调取tostring
            String fileName=file.getName();
            System.out.println(fileName);
            //获取后缀→转换为字符串
            String filePath=file.getPath();
            System.out.println(filePath);
            //获取文件大小
            System.out.println(file.length());

     File类文件操作:

     这里包含的是文件和文件夹的内容,其中比较常用的是创建新文件,测试文件或者文件夹是否存在。

    我们分开书写的话就是:

    System.out.println("=======文件操作==========");
            File file=new File("D:\demo0611\e\t\y");
            //创建文件  不能创建文件夹 不会覆盖掉之前的文件
            //file.createNewFile();   这里可以直接创建文件
            //判断file对象封装的文件或文件夹是否存在
            System.out.println(file.exists());//返回布尔值
            //删除文件、文件夹
            file.delete();
            //创建按文件夹 不加s不支持全部,加s支持一次更新好几个文件夹
            //file.mkdir();
            file.mkdirs();一次创建好几个文件夹
            //判断文件对象是否是文件夹
            System.out.println(file.isDirectory());
            //判断文件对象是否是文件夹
            System.out.println(file.isFile());
        }

      

     File类文件夹操作listFiles(遍历,求一个文件夹下的文件和文件夹的数量):

     1、返回一个字符串数组

    String [] files=file.list();
            //增强for遍历
            for(String s:files ){
                System.out.println(s);
            }

    2、返回一个抽象路径数组

    //获取路径下的所有文件和文件夹的File[] 路径,获取文件对象,可以操作file对象下的各种方法
            File[] files=file.listFiles();
            //遍历
            for(File f:files){
                System.out.println(f);
            }

     这里可以获取到全部的路径,就可以通过f操作File类下的操作了。

    文件过滤器

    这是判断文件是否包含在内

     

     


     案例一、获取.java后缀的文件

    //继承FileFilter来创建过滤的条件
    public class Java implements FileFilter{
    
        public boolean accept(File pathname) {
                //如果是文件夹,直接返回return true
            if(pathname.isDirectory()){
                return true;
            }
            //开始判断带.java的文件
            String name=pathname.getName();
            //开始转为小写,让大小写的都出来
            String endname=name.toLowerCase();
            return endname.endsWith(".java");
        }
    }
    =========测试类==========
    public class CeShi {
        public static void main(String[] args) {
            //先创建File类
                    File file=new File("D:\demo0611");
                    //调取getFile方法
                    getFile(file);
        }
        public static void getFile(File file){
            //传入过滤器
            File [] files=file.listFiles(new Java());
            //开始获取文件数组,这里用到递归
            for(File f:files){
                //首先判断是否是文件夹
                if(f.isDirectory()){
                    getFile(f);
                }else{
                    System.out.println("这是文件"+f);
                }
            }

    流程图:

    “D:\demo0611”==File pathname

    这个小案例可以得出,当我们创建一个自定义类来实现FileFilter接口时,除了重写了accept方法,并且在accept方法中建立了一个文件过滤条件,从而通过    File [] files=file.listFiles(new Java());将文件多走一边流程经过过滤器,晒选出满足过滤条件的文件,再进入遍历数组。加入递归是因为,我们需要不停的遍历总文件夹下的剩余文件夹里的文件,所以需要不停的调取自己进行二次遍历,直到没有相关的文件夹为止。最终实现效果。


    递归:

    递归,自己里面调用自己的方法

      必须有出口,否则没有意义

     构造方法不能递归

     递归的次数不能过多

    如果过多回报内存不足异常。

    递归练习:

     计算1-3的值

    public static void main(String[] args) {
            int sum=get(3);
            System.out.println(sum);
            //用递归的方式计算1-100的和
            //100+99+98+97+96+。。。1
            //100+(100-1)+(99+1)....1
            //计算5!=5*4*3*2*1
        }
        public static int get(int n){
            if(n==1){
                return 1;
            }
            return n+get(n-1);
        }
    ============值6=========

         //递归是从3开始走的
        //1                                           3     走第二遍 int n=2 走第三遍  int i=1
        public static int get(int n){
            if(n==1){
                return 1;    //走第三遍   1  
            }
            return n+get(n-1); //3+get(2)  第二遍 2+get(1)
        /*    当n==1的时候是出口,这时候有一个确认的值,ger(1)=1,
         * 所以求的确定值之后,第一遍return 给调用者get(n-1)处,
         * 是 2+(get(1))=2+1=3 ,这时求出了1+2的值
         * 第二遍return 是(n=3)+(get(n-1))=3+(get(2))=3+(get(1)+get(2))=3+3=6,
         * 这一边是求3的值
         * */
                                                
        }

    兔子事件

            public static void main(String[] args) {
                int sum=get(12);
                System.out.println(sum);
            }
            public static int get(int n){
                if(n==1){
                    return 1;
                    //递归的出口,当=1出去
                }
                    if(n==2){
                        return 1;
                    }
                    return get(n-1)+get(n-2);
                }
        }
    =======144=============
  • 相关阅读:
    docker固定IP地址重启不变
    关于 CentOS 7 里面 普通用户 Ulimit max user processes 值的问题
    CentOS tengine mysql 5.7 php 5.6
    strace 分析 跟踪 进程错误
    WPF中的字体改善
    C#数据类型-string
    WPF中的文字修饰
    Winform与WPF对话框(MessageBox, Dialog)之比较
    WPF中将四个数字字符串值(比如:"10,10,300,300")转为Rect
    WPF中嵌入Flash(ActiveX)
  • 原文地址:https://www.cnblogs.com/a199706/p/11464956.html
Copyright © 2020-2023  润新知