86-JavaFile类:概述、对象的创建、常用方法(API)

一、今日学习安排

1、目前是如何存储数据的?弊端是什么?

在这里插入图片描述


  • 在内存中存储的数据是用来处理、修改、运算的,只是临时存储在内存中的,无法长久保存的

2、计算机中,有没有一块硬件是可以永久存储数据的?

在这里插入图片描述


  • 磁盘中数据的形式就是文件,文件是数据的载体


二、学习思路

1、先要定位文件
  • File类可以定位文件:进行删除、获取文本本身信息等操作
  • 但是不能读写文件内容

2、读写文件数据
  • IO流技术可以对硬盘中的文件进行读写

3、总体学习思路
  • 先学会使用File类定位文件以及操作文件本身
  • 然后学习IO流读写文件数据



三、关于File、IO流,需要学会什么?

1、File类使用
  • 能够使用File的对象操作文件,如:删除、获取文件信息、创建文件夹等

2、方法递归
  • 理解递归算法思想并能完成常见递归题目,以及文件搜索

3、字符集
  • 程序中经常要读取文件中的数据,程序员必须先知道数据的底层形式才能够去学习如何读写数据的

4、IO流的作用、分类
  • 能够使用IO流完成文件数据的读写等操作

5、字节、字符流
  • 数据的类型很多,要学会选择不同的流进行读写操作



四、File类

1、概述
  • File类在包java.io.File下,代表操作系统的文件对象(文件、文件夹
  • File类提供了诸如:定位文件,获取文件本身的信息、删除文件、创建文件(或文件夹)等功能。

在这里插入图片描述



2、File类创建对象
方法名称说明
public File(String pathname)根据群文件路径创建文件对象
public File(String parent, String child)从父路径名字符串和子路径名字符串创建文件对象
public File(File parent, String child)根据父路径对应文件对象和子路径名字符串创建文件对象
  • File对象可以定位文件和文件夹
  • File封装的对象仅仅是一个路径名,这个路径可以是存在的,也可以是不存在的
package com.app.d1_file;

import java.io.File;

/**
    目标:创建File对象定位操作系统的文件(文件、文件夹)
 */
public class FileDemo1 {
    public static void main(String[] args) {
        // 1、创建File对象(指定文件的路径)
        /*
            路径写法:
                E:\JavaDevelop\images\1.jpg
                E:/JavaDevelop/images/1.jpg
                E:\JavaDevelop\images\1.jpg
                E:"+ File.separator +"JavaDevelop"+ File.separator +"images"+ File.separator +"1.jpg (可以跨平台)
         */
//        File file = new File("E:\\JavaDevelop\\images\\1.jpg");
        File file = new File("E:/JavaDevelop/images/1.jpg");
//        File file = new File("E:"+ File.separator +"JavaDevelop"+ File.separator +"images"+ File.separator +"1.jpg");
        long size = file.length();  // 获取文件的字节大小
        System.out.println("文件的字节大小是:" +size);

        // 2、File创建对象,支持绝对路径,支持相对路径(重点)
        File file1 = new File("E:\\JavaDevelop\\images\\2.jpg");    // 绝对路径
        System.out.println(file1.length());

        // 相对路径:一般定位模块中的文件的。相对到工程下!!
        File file2 = new File("day10-file-io-app/src/data.txt");
        System.out.println(file2.length());

        // 3、File创建对象,可以是文件也可以是文件夹
        File file3 = new File("E:/JavaDevelop/images");
        System.out.println(file3.length()); // 注意:文件夹是不能获取字节大小的,会给个假数据
        System.out.println(file3.exists()); // 判断文件或文件夹是否存在
    }
}
文件的字节大小是:808881
768737
6
4096
true

Process finished with exit code 0


3、绝对路径和相对路径
  • 绝对路径:从盘符开始

    File file1 = new File("D:\\app\\a.txt");
    
  • 相对路径:不带盘符,默认直接到当前工程下的目录寻找文件

    File file2 = new File("模块名\\a.txt");
    


总结

1、File类的作用?

  • 创建对象定位文件,可以删除、获取文件信息等。但是不能读写文件内容

2、File类构建对象的方式?

File file = new File("文件/文件夹/绝对路径/相对路径");

3、绝对路径和相对路径是什么样的?

  • 绝对路径是带盘符的,依赖当前系统
  • 相对路径是不带盘符的,默认相对到工程下开始寻找文件



五、File类的常用API

1、判断文件类型、获取文件信息
方法名称说明
public boolean isDirectory()测试此抽象路径名表示的File是否为文件夹
public boolean isFile()测试此抽象路径名表示的File是否为文件
public boolean exists()测试此抽象路径名表示的File是否存在
public String getAbsolutePath()返回此抽象路径名的绝对路径名字符串
public String getPath()将此抽象路径名转换为路径名字符串
public String getName()返回由此抽象路径名表示的文件或文件夹的名称
public long lastModified()返回文件最后修改的时间毫秒值
package com.app.d1_file;

import java.io.File;
import java.text.SimpleDateFormat;

/**
    目标:掌握File类的常用API的使用
 */
public class FileDemo02 {
    public static void main(String[] args) {
        // 1、绝对路径创建一个文件对象
        File file1 = new File("E:/JavaDevelop/images/4.jpg");

        // a.获取它的绝对路径
        System.out.println("获取该文件的绝对路径:" + file1.getAbsolutePath());

        // b.获取文件定义的时候使用的路径
        System.out.println("获取该文件在定义时候使用的路径:" + file1.getPath());

        // c.获取文件的名称:带后缀
        System.out.println("获取该文件的名称(带后缀):" + file1.getName());

        // d.获取文件的大小:字节个数
        System.out.println("获取该文件的字节大小:" + file1.length());

        // e.获取文件的最后修改时间(毫秒值)
        System.out.println("获取该文件最后修改时间:");
        long time = file1.lastModified();
        System.out.println("格式化前:" + time);
        // 将获取到的时间毫秒值转换成我们自己喜欢的格式
        System.out.println("格式化后:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time));

        // f、判断该文件是文件还是文件夹
        System.out.println("该文件是否为文件:" + file1.isFile());         // true
        System.out.println("该文件是否为文件夹:" + file1.isDirectory());    // false

        // g.判断该文件或文件夹是否存在
        System.out.println("该文件或文件夹是否存在:" + file1.exists());    // true



        System.out.println("--------------------------------------------------");



        // 2、相对路径路径创建一个文件对象
        File file2 = new File("day10-file-io-app\\src\\data.txt");

        // a.获取它的绝对路径
        System.out.println("获取该文件的绝对路径:" + file2.getAbsolutePath());

        // b.获取文件定义的时候使用的路径
        System.out.println("获取该文件在定义时候使用的路径:" + file2.getPath());

        // c.获取文件的名称:带后缀
        System.out.println("获取该文件的名称(带后缀):" + file2.getName());

        // d.获取文件的大小:字节个数
        System.out.println("获取该文件的字节大小:" + file2.length());

        // e.获取文件的最后修改时间(毫秒值)
        System.out.println("获取该文件最后修改时间:");
        long time2 = file2.lastModified();
        System.out.println("格式化前:" + time2);
        // 将获取到的时间毫秒值转换成我们自己喜欢的格式
        System.out.println("格式化后:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time2));

        // f、判断该文件是文件还是文件夹
        System.out.println("该文件是否为文件:" + file2.isFile());           // true
        System.out.println("该文件是否为文件夹:" + file2.isDirectory());    // false

        // g.判断该文件或文件夹是否存在
        System.out.println("该文件或文件夹是否存在:" + file1.exists());    // true



        System.out.println("--------------------------------------------------");



        // 3、绝对路径创建一个文件对象
        File file3 = new File("E:/");

        // a.判断该文件是文件还是文件夹
        System.out.println("该文件是否为文件:" + file3.isFile());           // false
        System.out.println("该文件是否为文件夹:" + file3.isDirectory());    // true

        // b.判断该文件或文件夹是否存在
        System.out.println("该文件或文件夹是否存在:" + file1.exists());    // true



        System.out.println("--------------------------------------------------");



        // 4、不存在路径创建一个文件对象
        File file4 = new File("E:/jjsfs");

        // a.判断该文件是文件还是文件夹
        System.out.println("该文件是否为文件:" + file4.isFile());          // false
        System.out.println("该文件是否为文件夹:" + file4.isDirectory());   // false

        // b.判断该文件或文件夹是否存在
        System.out.println("该文件或文件夹是否存在:" + file4.exists());    // false
    }
}
获取该文件的绝对路径:E:\JavaDevelop\images\4.jpg
获取该文件在定义时候使用的路径:E:\JavaDevelop\images\4.jpg
获取该文件的名称(带后缀):4.jpg
获取该文件的字节大小:505697
获取该文件最后修改时间:
格式化前:1620665560340
格式化后:2021-05-11 00:52:40
该文件是否为文件:true
该文件是否为文件夹:false
该文件或文件夹是否存在:true
--------------------------------------------------
获取该文件的绝对路径:E:\JavaDevelop\code01\javasepromax\day10-file-io-app\src\data.txt
获取该文件在定义时候使用的路径:day10-file-io-app\src\data.txt
获取该文件的名称(带后缀):data.txt
获取该文件的字节大小:6
获取该文件最后修改时间:
格式化前:1663335070867
格式化后:2022-09-16 21:31:10
该文件是否为文件:true
该文件是否为文件夹:false
该文件或文件夹是否存在:true
--------------------------------------------------
该文件是否为文件:false
该文件是否为文件夹:true
该文件或文件夹是否存在:true
--------------------------------------------------
该文件是否为文件:false
该文件是否为文件夹:false
该文件或文件夹是否存在:false

Process finished with exit code 0


2、创建文件、删除文件功能
方法名称说明
public boolean createNewFile()创建一个新的空的文件
public boolean mkdir()只能创建一级文件夹
public boolean mkdirs()可以创建多级文件夹
public boolean delete()删除由此抽象路径名表示的文件空文件夹
  • delete()方法直接删除不走回收站;如果删除的是一个文件,且文件被占用也可直接删除
  • delete()方法默认只能删除空文件夹
package com.app.d1_file;

import java.io.File;

/**
    目标:掌握File类的创建、删除文件的API的使用
 */
public class FileDemo03 {
    public static void main(String[] args) throws Exception {
        File file1 = new File("day10-file-io-app\\src\\data.txt");
        // 1、创建新文件,创建成功返回true,失败返回true(几乎不用,因为以后文件都是自动创建的!)
        System.out.println("创建data.txt文件是否成功:" + file1.createNewFile()); // false:因为data.txt文件已存在该路径下
        File file2 = new File("day10-file-io-app\\src\\data02.txt");
        File file3 = new File("day10-file-io-app\\src\\data03.txt");
        System.out.println("创建data02.txt文件是否成功:" + file2.createNewFile());  // true:因为data02.txt文件未存在该路径下
        System.out.println("创建data03.txt文件是否成功:" + file3.createNewFile());  // true


        System.out.println("-----------------------------------");


        // 2、mkdir创建一级目录
        File file4 = new File("E:/JavaDevelop/FileDemo01");
        // true:因为JavaDevelop目录已经存在,所以FileDemo01为一级目录,创建成功
        System.out.println("创建一级目录FileDemo01是否成功:" + file4.mkdir());

        // 3、mkdirs创建多级目录(重点)
        File file5 = new File("E:/JavaDevelop/FileDemo02/aaa/bbb/ccc");
        // false:因为JavaDevelop目录已经存在,FileDemo02、aaa、bbb这些目录皆都不存在,因此创建失败!!
        System.out.println("创建一级目录ccc是否成功:" + file5.mkdir());

        // true:因为mkdirs支持创建多级目录(建议使用)
        System.out.println("创建多级目录是否成功:" + file5.mkdirs());


        System.out.println("-----------------------------------");


        // 4、删除文件或者空文件夹(只能删除空文件夹:因为java考虑到安全性,防止程序员误删,以免数据丢失无法找回)
        System.out.println("删除data03.txt文件是否成功:" + file3.delete()); // true

        File file6 = new File("E:\\JavaDevelop\\images\\5.jpg");
        // true:就算你的文件是被占用着,也能直接删除掉
        System.out.println("删除5.jpg文件是否成功:" + file6.delete());

        System.out.println("删除空文件夹FileDemo01是否成功:" + file4.delete());   // true

        // false:因为java考虑到安全性,防止程序员误删,以免数据丢失无法找回
        File file7 = new File("E:/JavaDevelop/images");
        System.out.println("删除非空文件夹images是否成功:" + file7.delete());
    }
}
创建data.txt文件是否成功:false
创建data02.txt文件是否成功:true
创建data03.txt文件是否成功:true
-----------------------------------
创建一级目录FileDemo01是否成功:true
创建一级目录ccc是否成功:false
创建多级目录是否成功:true
-----------------------------------
删除data03.txt文件是否成功:true
删除5.jpg文件是否成功:true
删除空文件夹FileDemo01是否成功:true
删除非空文件夹images是否成功:false

Process finished with exit code 0



总结

1、创建多级目录使用哪个方法?

public boolean mkdirs()

2、删除文件需要注意什么?

  • 可以删除文件、空文件夹,默认不能删除非空文件夹


3、遍历文件夹
方法名称说明
public String[] list()获取当前目录下所有的“一级文件名称”到一个字符串数组中去返回
public File[] listFiles()获取当前目录下所有的“一级文件对象”到一个文件对象数组中去返回(常用、重点

listFiles()方法注意事项

  • 当调用者不存在时,返回null
  • 当调用者是一个文件时,返回null
  • 当调用者是一个空文件夹时,返回一个长度为0的数组
  • 当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
  • 当调用者是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏内容
  • 当调用者是一个需要权限才能进入的文件夹时,返回null
package com.app.d1_file;

import java.io.File;
import java.util.Arrays;

/**
    目标:掌握遍历文件夹的API,及listFiles()方法的注意事项
 */
public class FileDemo04 {
    public static void main(String[] args) {
        // 1、绝对路径创建一个文件对象
        File file = new File("E:/JavaDevelop/images");

        /*
            2、获取当前目录下所有的“一级文件名称”到一个字符串数组中去返回
            注意:只能拿到一级文件名称,假如目录下还有文件或文件夹,是拿不到的
         */
        String[] fileNames = file.list();
        for (String fileName : fileNames) {
            System.out.println(fileName);
        }


        System.out.println("----------------------");


        /*
            3、获取当前目录下所有的“一级文件对象”到一个文件对象数组中去返回(重点、常用)
            注意:只能拿到一级文件名称,假如目录下还有文件或文件夹,是拿不到的
         */
        File[] files = file.listFiles();
        for (File f : files) {
            System.out.println(f);  // 输出的是文件或文件夹的绝对路径
        }


        System.out.println("----------------------");


        /*
            listFile()方法的注意事项:
            1、当调用者不存在时,返回null
            2、当调用者是一个文件时,返回null
            3、当调用者是一个空文件夹时,返回一个长度为0的数组
            4、当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中去返回
            5、当调用者是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中去返回,包含隐藏的内容
            6、当调用者是一个需要权限才能进入的文件夹时,返回null
         */
        // 1
        File dir = new File("E:/ggg");   // 调用者:不存在此文件夹
        File[] files2 = dir.listFiles();
        System.out.println("当该文件夹不存在时:" + files2); // null

        // 2
        File isFile = new File("E:/JavaDevelop/images/出师表.txt");    // 调用者:是一个文件
        File[] files3 = isFile.listFiles();
        System.out.println("当调用者是一个文件时:" + files3); // null

        // 3
        File emptyFile = new File("E:\\JavaDevelop\\images\\kong"); // 调用者:是一个空文件夹
        File[] files4 = emptyFile.listFiles();
        System.out.println("当调用者是一个空文件夹时:" + Arrays.toString(files4));  // []
    }
}
2.jpg
3.jpg
4.jpg
aaa
data.txt
kong
出师表.txt
晚霞.jpg
----------------------
E:\JavaDevelop\images\2.jpg
E:\JavaDevelop\images\3.jpg
E:\JavaDevelop\images\4.jpg
E:\JavaDevelop\images\aaa
E:\JavaDevelop\images\data.txt
E:\JavaDevelop\images\kong
E:\JavaDevelop\images\出师表.txt
E:\JavaDevelop\images\晚霞.jpg
----------------------
当该文件夹不存在时:null
当调用者是一个文件时:null
当调用者是一个空文件夹时:[]

Process finished with exit code 0



总结

1、如何遍历文件夹下的文件对象?使用什么方法?有什么特点?

public File[] listFiles()
  • 只能遍历当前文件夹对象下的一级文件对象


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值