Java学习day17:File类(一片文章搞懂重难点)

声明:该专栏本人重新过一遍java知识点时候的笔记汇总,主要是每天的知识点+题解,算是让自己巩固复习,也希望能给初学的朋友们一点帮助,大佬们不喜勿喷(抱拳了老铁!)


往期回顾

Java学习day16:内部类、map集合(知识点详解)-CSDN博客

Java学习day15:Object类、set集合(知识点+例题详解)_java set集合编程题-CSDN博客

Java学习day14:权限修饰符,集合(知识点+例题详解)-CSDN博客

 Java学习day17:File类

1.文件和文件夹(文件路径)的抽象表示

是专门用来显示出来磁盘上面的文件或者文件夹的,之前都是手动创建,现在可以借助Java封装好的类创建文件夹和文件。

为什么要通过代码去创建?

很简单,比如我们给客户做一个项目,获取数据后需要导出成execl文件在用户电脑里,这个时候我们不可能说让用户自己创建,肯定是需要代码直接操作创建的。

比如写了一个外卖系统管理后端,提供了一个功能可以一键导出外卖数据,生成excle表格。

2.路径问题

2.1相对路径

得有一个参照物。

./ 当前工作目录
../ 上一级路径的目录
../../ 上两级目录

2.2绝对路径 

磁盘的根路径一级一级的往下找。比如:C:\ccc\ddd\1.png。

3.File 类的构造方法

File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。
File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的File实例。

示例:

import java.io.File;

public class Demo1 {
    public static void main(String[] args) {
        //可以将1.txt 抽象成一个Java代码的对象
        File file = new File("c:/aaa/1.txt");
        File file2 = new File("c:\\aaa\\1.txt");

        System.out.println(File.separator);
        //为了保证你的代码在任意的系统下面 路径的分割符是都可以使用
        //可以咋写代码?
        File file3 = new File("c:" + File.separator + "aaa" + File.separator + "1.txt");
        System.out.println(file3);
        System.out.println("=====");
        System.out.println(file);
        //File(String parent, String child)
        File file1 = new File("c:/aaa/", "1.txt");
        System.out.println(file1);


    }
}

        Java中   看系统
          1./  在windows系统和linux 都是可以的!!!
          2.\  只有在windows系统下面可以的   而且需要使用转义字符\
          static String separator
          与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。
          当你是window系统的时候 就是\
          当你的代码在linux  /     

4.File类下面的方法 

4.1创建文件

boolean  createNewFile(); 创建一个文件 返回值是布尔类型的数据
boolean mkdir(); 创建单级路径
boolean mkdirs(); 创建多级路径

区分单机路径和多级路径,单机路径就是说,在指定的文件目录下去创建一个目录,而多级呢,就是说先在指定路径创建一个文件夹,再在这个文件夹里又创建一个文件夹,这就是多级路径 

创建文件的三个方法都是boolen类型

1.如果文件路径不存在会报错

2.如果文件名字已经存在,返回false

3.磁盘坏了,创建不了 

示例:

import java.io.File;
import java.io.IOException;

public class Demo2 {
    public static void main(String[] args) throws IOException {
        File file = new File("c:/aaa/1.txt");
        System.out.println(file.createNewFile());
        File file1 = new File("c:/aaa/bbb");
        System.out.println(file1.mkdir());//单级路径

        File file2 = new File("c:/aaa/ccc/ddd");
        System.out.println(file2.mkdirs());//多级路径
        

    }
}

4.2删除文件或者文件夹 

boolean delete(); 立即删除文件,常用的
void  deleteOnExit(); 不会立即删除,是程序退出以后才删除的

示例:

import java.io.File;
import java.util.Scanner;

public class Demo3 {
    public static void main(String[] args) {
        File file = new File("c:/aaa/1.txt");
        System.out.println(file.delete());
        //删除一个非空的文件夹,是删除不了的,咋办?递归
        File file1 = new File("c:/aaa/ccc");
        System.out.println(file1.delete());

        File file2 = new File("c:/aaa/bbb");
        System.out.println(file2.delete());
        File file3 = new File("c:/aaa/ccc/ddd");
        file3.deleteOnExit();
        //如果保证程序不退出
        new Scanner(System.in).nextInt();

    }
}

 例题:

删除某一个目录下面的所有的文件
当你不知道你有多少个文件夹和文件的时候,咱们可以递归的

import java.io.File;

public class Demo9 {
    public static void main(String[] args) {
        File file = new File("c:/aaa/bbb");
        del(file);
    }
    public static void del (File file) {
        //所有文件先取出来
        File[] files = file.listFiles();
        /**
         * c:\aaa\bbb\1.txt
         * c:\aaa\bbb\ddd
         *  file1是ddd  是文件夹
         *  1.txt删除了
         *  再次执行del(file1) ddd文件夹
         *      eee
         *      2.txt
         *        再次执行del(eee) eee文件夹了
         */
        for (File file1 : files) {
            System.out.println(file1);
            if (file1.isDirectory()) {//是文件夹
                del(file1);//递归

            }else {//是文件
                file1.delete();
            }
        }
    }
}

4.3File对象的判断方法 

boolean isFile();  是否是文件【常用】
boolean isDirectory(); 是否是文件夹【常用】
boolean isHidden(); 是否是隐藏文件 右键单击文件-属性-隐藏
文件夹里查看-显示-隐藏的项目
有时候还挺好玩的
boolean isAbsolute(); 是否是绝对路径
boolean exists(); 判断文件或者文件夹是否存在【重要】 用在if语句,先判断是否存在,再看要不要创建

示例:

import java.io.File;
import java.io.IOException;

public class Demo4 {
    public static void main(String[] args) throws IOException {
        File file = new File("c:/aaa");
        System.out.println(file.isFile());//false
        File file1 = new File("c:/aaa/2.gif");
        System.out.println(file1.isFile());//true
        System.out.println(file.isDirectory());//true
        System.out.println(file1.isDirectory());//false
        File file2 = new File("c:/aaa/2.txt");
        System.out.println(file2.isHidden());//true
        System.out.println(file1.isHidden());//false
        System.out.println(file.isAbsolute());//true

        File file3 = new File("./");
        System.out.println(file3.isAbsolute());//false

        System.out.println(file1.exists());//true
        if (!file1.exists()) {
            file1.createNewFile();
        }
    }
}

4.4不同返回值下的方法 

4.4.1返回值是String类型的数据的
String getName(); 获取文件或者文件夹的名字的
String getPath(); 获取当前对象的路径的
String getParent(); 获取当前文件对象的上一级的目录

示例:

import java.io.File;

public class Demo5 {
    public static void main(String[] args) {
        File file = new File("c:\\aaa\\2.gif");
        System.out.println(file.getName());//2.gif
        System.out.println(file.getParent());//c:\aaa
        System.out.println(file.getPath());//c:\aaa\2.gif
        System.out.println(file);//c:\aaa\2.gif
    }
}

这里会发现最后两个打印的结果是一样的,但是本质上是完全不同的,一个是file对象,可以调用File类下面的方法,一个是String对象,可以调用String类下面的方法,本质上的区别 

 4.4.2返回是long类型数据的
long length(); 返回值是文件占用的字节数
long lastModified(); 获取当前文件最后一次修改的时间 是从1970 1月1日 0时 0分 0 秒开始到文件修改时间的毫秒数,/1000以后变成时间戳

示例:

import java.io.File;

public class Demo6 {
    public static void main(String[] args) {
        File file = new File("c:/aaa/8.txt");
        System.out.println(file.length());//48

        //1659687558179  
        //从1970 1月1日 0时 0分 0 秒  ~ 2022 8  5  16:19
        //的毫秒数
        System.out.println(file.lastModified());
        
    }
}
4.4.3返回是数组类型数据的 
File[]   listFiles(); 获取当前文件夹下面的所有的文件 获取的是File对象
String[]  list(); 获取当前文件夹下面的所有文件的名字 获取的是String类型数据

示例:

import java.io.File;

public class Demo7 {
    public static void main(String[] args) {
        File file = new File("c:/");
        File[] files = file.listFiles();
        for (File file1 : files) {
            //列出来的是对象 File
            System.out.println(file1);
        }
        System.out.println("=======");
        String[] list = file.list();
        for (String s : list) {
            //文件的名字
            System.out.println(s);
        }
    }
}

5.总结 

1.File类下面的方法
 createNewFile  创建一个新的文件
 mkdir 创建一个单级的文件夹
 mkdirs创建多级的文件夹
 delete 删除文件或者文件夹
 isFile 判断是否是文件
 isDirectory 判断是否是文件夹
 isHidden 判断是否是隐藏文件
 isAbsolute 判断是否是绝对的路径
 exists 判断文件是否存在(需要用的)
 getName 获取文件或者文件夹的名字
 getPath 获取当前file对象的路径的
 getParent  获取当前文件的上一级目录
 length 文件占用的字节数 byte  
 lastModified  获取当前文件被修改的时间  除以1000等于时间戳  本身返回值是毫秒数
 listFile 返回值是File数组 将当前的文件夹下面的所有的文件或者文件夹返回一个File数组
 list   返回值是String数组,将当前的文件夹下面的所有的文件或者文件夹String


以上,就是今天的所有知识点了。File类的常用方法比较多,但是都不算太难,大家得多花点时间,静下心记忆一下,不是什么大问题。

加油吧,预祝大家变得更强!

你可能感兴趣的:(java从0到1,学习,java,intellij-idea,开发语言,java-ee)