欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JAVA基础之File类

程序员文章站 2022-04-29 18:49:00
个人理解: File是个文件类,可以用其增加、删除、查找某种类型的文件或者文件夹,同时根据其成员变量的特点可以综合利用,避免出现跨系统的时候出现错误,并且查找时最好输入绝对路径,以免出现不存在的文件。使用递归时一定要主要好停止,以免栈内存溢出。 一、简述IO操作: 当需要把内存中的数据存储到持久化设 ......

个人理解:

  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、构造方法不能递归使用。