JAVA学习笔记(二十)

Posted boringlee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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");
    }
}

 

以上是关于JAVA学习笔记(二十)的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记之二十九Java中的"equals"和"=="的用法及区别

JAVA学习笔记(二十)

Java学习笔记之二十六深入理解Java匿名内部类

Java学习笔记(二十二):打包程序

Java基础学习笔记二十 IO流

Java基础学习笔记二十五 MySQL