JAVA基础之File类详解编程语言

个人理解:

  File是个文件类,可以用其增加、删除、查找某种类型的文件或者文件夹,同时根据其成员变量的特点可以综合利用,避免出现跨系统的时候出现错误,并且查找时最好输入绝对路径,以免出现不存在的文件。使用递归时一定要主要好停止,以免栈内存溢出。

一、简述IO操作:

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

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

这个输入和输出的动作称为IO操作。

二、File类:

1、文件类:

成员变量:

import java.io.File; 
 
public class Demo01 { 
    public static void main(String[] args) { 
        //File类 
        //文件:File 
        //目录(文件夹):directory 
        //路径:path 
        //路径分隔符(与系统有关的)<windows里面是 ; linux里面是 : > 
        System.out.println(File.pathSeparator);  //   ; 
        //与系统有关的路径名称分隔符<windows里面是 / linux里面是/ > 
        System.out.println(File.separator);      //  / 
    } 
}

2、构造函数:

import java.io.File; 
 
public class Demo02 { 
    public static void main(String[] args) { 
        File file=new File("D://java//b.txt");  //双//是转义 
        System.out.println(file); 
        File file2=new File("D://java","a.txt");//父路径、子路径--可以适用于多个文件的! 
        System.out.println(file2); 
        File parent=new File("D://java"); 
        File file3=new File(parent,"a.txt");//File类的父路径、子路径 
        System.out.println(file3); 
    } 
}

3、File类的获取及文件的创建和删除、判断:

import java.io.File; 
import java.io.IOException; 
 
public class Demo03 { 
    public static void main(String[] args) throws IOException { 
        method06(); 
         
    } 
    public static void method01(){ 
        File file=new File("D://java//a.txt"); 
        //获取文件对象的绝对路径 
        System.out.println(file.getAbsolutePath()); 
        File file0=new File("src");//写相对路径的话,会自动转成绝对路径,但是不去检验文件是否真实存在(只会给翻译回来,可能根本不存在) D:/JAVA0322/Day16/src 
        //获取文件对象的绝对路径 
        System.out.println(file0.getAbsolutePath()); 
        File file00=new File("aa");//这个根本不存在  D:/JAVA0322/Day16/aa 
        //获取文件对象的绝对路径 
        System.out.println(file00.getAbsolutePath()); 
        //获取文件对象的文件名或者目录名 
        System.out.println(file.getName()); 
        //获取文件对象的路径所对应的字符串   类似于toString()方法 
        System.out.println(file.getPath()); 
        //获取文件的大小(字节---Long类型) 
        System.out.println(file.length()); 
    } 
    //文件创建和删除 
    public static void method02() throws IOException{ 
        File file=new File("D://java//d"); 
        //创建文件 
        boolean flag=file.createNewFile();//都是创建的文件(最好都是加上后缀的),不能是文件夹 
        System.out.println(flag); 
    } 
    //文件删除 
    public static void method03(){ 
        File file=new File("D://java//d"); 
        //删除文件(找不回来了) 
        boolean flag=file.delete(); 
        System.out.println(flag); 
    } 
    //文件判断 
    public static void method04(){ 
        File file=new File("D://java//a.txt"); 
        //判断该文件对象所对应的文件是否存在 
        System.out.println(file.exists()); 
        //判断该文件对象是否是文件夹 
        System.out.println(file.isDirectory()); 
        //判断该文件对象是否是文件 
        System.out.println(file.isFile()); 
    } 
    //创建文件夹 
    public static void method05(){ 
        File file=new File("D://java//d.txt");//windows系统内文件夹名字不区分大小写,最后这个是文件夹的名字 
        boolean flag=file.mkdir(); 
        System.out.println(flag); 
    } 
    //创建文件夹 
        public static void method06(){ 
            File file=new File("D://java//d//a//b");//mkdirs()用于创建多级目录,经常用的方法,不加s不能创建多级目录 
            boolean flag=file.mkdirs(); 
            System.out.println(flag); 
        } 
}

4、listFiles()方法介绍

import java.io.File; 
 
public class Demo04 { 
    public static void main(String[] args) { 
        method03(); 
    } 
    public static void method01(){ 
        File file=new File("D://java"); 
        //获取该路径下的文件和文件夹 
        String[] arr=file.list(); 
        //遍历 
        for(String s:arr){ 
            System.out.println(s);//返回文件的全部的名字 
        } 
    } 
    public static void  method02(){ 
        File file=new File("D://java"); 
        //获取该路径下的文件和文件夹所对应的文件对象 
        File[] files=file.listFiles(); 
        for(File f:files){ 
            System.out.println(f);//获得的其绝对路径---根本方法 
        } 
    } 
}

需要注意的是:

①、指定的目录也就是文件夹必须存在;

②、指定的必须是目录。否则会空指针。

4、文件过滤器:

FileFilter 与FilenameFilter都是接口:

 public static void  method03(){ 
        File file=new File("D://java"); 
        //获取该路径下的文件和文件夹所对应(括号内为条件,也就是某个类型)的文件对象 
        File[] files=file.listFiles(new MyFileFilter()); 
        for(File f:files){ 
            System.out.println(f);//获得的其绝对路径---根本方法 
        } 
    }
import java.io.File; 
import java.io.FileFilter; 
//过滤器: 
public class MyFileFilter implements  FileFilter{ 
 
    public boolean accept(File pathname) { 
        /*//获取文件名 
        String filename=pathname.getName(); 
        //判断文件名是否以.txt结尾 
        boolean flag=filename.endsWith(".txt"); 
        return flag; 
    */ 
        return pathname.getName().endsWith(".txt"); 
     
    } 
}

三、递归:

  在当前方法内调用自己的现象

//递归 
public class Demo01 { 
 
    public static void main(String[] args) { 
        int sum=get(100); 
        System.out.println(sum); 
    } 
    //用递归计算1-100的和 
    public static int get( int num){ 
        if(num==1){ 
            return 1; 
        } 
        return num +get(num-1); 
    } 
}
import java.io.File; 
 
public class Demo02 { 
    public static void main(String[] args) { 
        File file=new File("D://java"); 
        look(file); 
    } 
    public static void look(File file){ 
        //获取该路径下所有的文件夹和文件 
        File[] files=file.listFiles(new MyFilter());//获得.txt文件和文件夹 
        //遍历 
        for(File f:files){ 
            //如果是文件夹则继续寻找 
            if(f.isDirectory()){ 
                look(f); 
            }else{//如果不是则打印 
                System.out.println(f); 
            } 
        } 
    } 
}
import java.io.File; 
import java.io.FileFilter; 
 
public class MyFilter    implements FileFilter { 
 
    public boolean accept(File pathname) { 
        //获取以.txt为后缀的文件 
        //如果是文件夹,那么放到File[]数组内 
        if(pathname.isDirectory()){ 
            return true; 
        } 
        return pathname.getName().endsWith(".JaVa"); 
    } 
     
}    

需要注意的是:

1、要保证递归能够停下来;

2、递归次数不能太多;

3、构造方法不能递归使用。

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/16575.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论