zoukankan      html  css  js  c++  java
  • JAVA学习笔记(二十)

    IO流

      当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。

      当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。

      因此我们把这种输入和输出动作称为IO操作。

    File类

      打开API,搜索File类。阅读其描述:File文件和目录路径名的抽象表示形式。即,Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可。

      通过构造函数创建File对象:

    public class FileDemo {
        public static void main(String[] args) {
            //File构造函数演示
            String pathName = "e:\java_code\day22e\hello.java";
            File f1 = new File(pathName);//将Test22文件封装成File对象。注意;有可以封装不存在文件或者文件夹,变成对象。
            System.out.println(f1);
            
            File f2 = new File("e:\java_code\day22e","hello.java");
            System.out.println(f2);
            
            //将parent封装成file对象。
            File dir = new File("e:\java_code\day22e");
            File f3 = new File(dir,"hello.java");
            System.out.println(f3);
        }
    }

    File类的获取

    public class FileMethodDemo {
        public static void main(String[] args) {
            //创建文件对象
            File file = new File("Test22.java");
            //获取文件的绝对路径,即全路径
            String absPath = file.getAbsolutePath();
            //File中封装的路径是什么获取到的就是什么。
            String path = file.getPath();
            //获取文件名称
            String filename = file.getName();
            //获取文件大小
            long size = file.length();
            
            System.out.println("absPath="+absPath);
            System.out.println("path="+path);
            System.out.println("filename="+filename);
            System.out.println("size="+size);
        }
    }

    File类的常用操作

    package com.oracle.demo01;
    
    import java.io.File;
    import java.io.IOException;
    
    public class FileDemo02 {
        public static void main(String[] args) throws IOException {
            //创建文件
            File f=new File("E:\Users\demo.txt");
            boolean b=f.createNewFile();
            System.out.println(b);
            //创建文件夹
            File f2=new File("E:\Users\test");
            boolean b2=f2.mkdir();
            System.out.println(b2);
            //创建多级文件夹file.mkdirs
            //删除
            File f2=new File("E:\Users\test");
            boolean b2=f2.delete();
            System.out.println(b2);
            //判断是否存在
            File f=new File("s:\test\aa");
            System.out.println(f.exists());
            //判断这个文件对象是否是文件夹
            System.out.println(f.isDirectory());
            //File类中有几个名次
            //文件File
            //目录(文件夹)directory
            //路径 path
            //文件的获取
            File f=new File("src");
            System.out.println(f.getAbsolutePath());
            System.out.println(f.getName());
            System.out.println(f.getPath());
            System.out.println(f.length());
        }
    }

    listFiles()方法

    package com.oracle.demo01;
    
    import java.io.File;
    
    public class FileDemo03 {
    
        public static void main(String[] args) {
            /*
             * ListFiles方法每次循环目录中的文件,循环一次调用
             * accept方法,进行判断,如果返回true就存到文件数组中
             * 
             * */
            File f=new File("C:\Program Files\Java\jdk-9.0.4\bin");
            File[] f2=f.listFiles(new MyFilter());
            for(File f3:f2) {
                System.out.println(f3);
        }
        }
    }
    package com.oracle.demo01;
    
    import java.io.File;
    
    public class FileListDemo {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            //创建获取的路径对象
            File f=new File("E:\Users\Administrator\eclipse-workspace");
            //获取此路径下文件数组
            File[] f2=f.listFiles();
            //遍历数组
            for(File file:f2) {
                System.out.println(file);
            }
        }
    }

      注意:在获取指定目录下的文件或者文件夹时必须满足下面两个条件

      1,指定的目录必须是存在的,

      2,指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException

    文件过滤器

    package com.oracle.demo01;
    
    import java.io.File;
    import java.io.FileFilter;
    //过滤器
    public class MyFilter implements FileFilter{
        public boolean accept(File pathname) {
            String p=pathname.getName();
            return p.endsWith(".exe");
            if(pathname.isDirectory()) {
                return true;
            }
            String p=pathname.getName().toLowerCase();
            return p.endsWith(".exe");
        }
        
    }

    递归

      递归,指在当前方法内调用自己的这种现象

    package com.oracle.demo02;
    
    public class Demo01 {
    /*
     * 递归
     * */
        public static void main(String[] args) {
            //求1....100的和
            //100+99+98+97+...
            int sum=get(5);
            System.out.println(sum);
        }
        public static int get(int a) {
            if(a==1) {
                return 1;
            }
            return a*get(a-1);
        }
            public static int getsum(int a) {
                int sum=0;
                for(int i=1;i<a;i++) {
                    sum+=i;
                }
                return sum;
            }
        }

      注意:递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。

         在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。

    递归打印所有子目录中的文件路径

      要求:若指定的目录有子目录,那么把子目录中的文件路径也打印出来

      步骤:

        指定要打印的目录File对象

        调用getFileAll()方法

          获取指定目录中的所有File对象

          遍历得到每一个File对象

        判断当前File 对象是否是目录

          判断结果为true,说明为目录,通过递归,再次调用步骤2的getFileAll()方法

          判断结果为false,说明是文件,打印文件的路径

    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文件(含子目录)

      要求:编写一个方法用来打印指定目录中的.java文件路径,并进行方法的调用若指定的目录有子目录,那么把子目录中的.java文件路径也打印出来

      步骤:

      1. 指定要打印的目录File对象

      2. 调用getFileAll()方法,传入要打印的目录File对象

        2.1 通过FilenameFilter过滤器获取指定目录中的所有.java类型的File对象

        2.2 遍历得到每一个File对象

        2.3 判断当前File 对象是否是目录

          判断结果为true,说明为目录,通过递归,再次调用步骤2的getFileAll()方法

          判断结果为false,说明是文件,打印文件的路径

    public class FileDemo4 {
        public static void main(String[] args) {
            File file = new File("d:\test");
            getFileAll(file);
        }
        //获取指定目录以及子目录中的所有的文件
        public static void getFileAll(File file) {
            File[] files = file.listFiles(MyFileFilter());
            //遍历当前目录下的所有文件和文件夹
            for (File f : files) {
                //判断当前遍历到的是否为目录
                if(f.isDirectory()){
                    //是目录,继续获取这个目录下的所有文件和文件夹
                    getFileAll(f);
                }else{
                    //不是目录,说明当前f就是文件,那么就打印出来
                    System.out.println(f);
                }
            }
        }
    }

      自定义文件过滤器:

    //定义类实现文件名称FilenameFilter过滤器
    class MyFileFilter implements FilenameFilter{
        public boolean accept(File dir, String name) {
            return name.endsWith(".java");
        }
    }
  • 相关阅读:
    取得当前目录下所有文件名
    windows用户态和内核态
    MFC CDialog中控件跨线程访问失败
    Effective C++学习笔记(八)
    Effective C++学习笔记(六)
    Effective C++学习笔记(七)
    Effective C++学习笔记(五)
    Effective C++学习笔记(四)
    Effective C++学习笔记(三)
    Effective C++学习笔记(二)
  • 原文地址:https://www.cnblogs.com/boringLee/p/9054708.html
Copyright © 2011-2022 走看看