Java---File基本

File

介绍

File是java.io.包下的类, File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)
注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据。

创建File类的对象

  1. File对象既可以代表文件、也可以代表文件夹。
  2. File封装的对象仅仅是一个路径名,这个路径可以是存在的,也允许是不存在的
    在这里插入图片描述

目标:掌握File对象的创建

  //构造方法:
 File(String pathname)//根据文件路径创建文件对象
 File(String parent, String child)//根据父路径名字符串和子路径名字符串创建文件对象
 File(File  parent, String child)//根据父路径对应文件对象和子路径名字符串创建文件对象
  //1.创建File对象,代表:C:\Users\志\Desktop\test\a.txt 文件
 File aFile = new File("C:\\Users\\志\\Desktop\\test\\a.txt");
//File对象封装的就是文件\文件夹路径
System.out.println(aFile);
  //2.创建File对象,代表:C:\Users\志\Desktop\test
File testFile = new File("C:\\Users\\志\\Desktop", "test");
System.out.println(testFile);
 //3.创建File对象,代表:C:\Users\志\Desktop\test\b.txt (此时文件不存在)
File bFile = new File(testFile, "b.txt");
System.out.println(bFile);

注意:从盘符开始的路径都叫绝对路径。还有一种叫相对路径!

//4.相对路径:如果创建的File对象代表当前项目中的某个文件\文件夹,就可以使用相对路径。因为相对的是当前项目的路径
//需求:创建File对象,代表当前模块下的配置文件day09.iml
        //File f = new File("D:\\WorkSpace\\IdeaProjects\\se-code\\day09\\day09.iml");
File f = new File("day09\\day09.iml");
System.out.println(f);
小结
  1. File类构建对象的方式是什么样的?File的对象可以代表哪些东西?
File file = new File(“文件/文件夹/绝对路径/相对路径”);

  1. 绝对路径和相对路径是什么意思?
    绝对路径是带盘符的。
    相对路径是不带盘符的,默认到当前工程下寻找文件。

常用方法

  1. File提供的判断文件类型、获取文件信息功能
    在这里插入图片描述
 //public boolean exists():判断File对应的文件/文件夹在硬盘上是否存在
File aFile = new File("C:\\Users\\志\\Desktop\\test\\a.txt");
boolean r1 = aFile.exists();
System.out.println(r1);
//public boolean isFile():判断File对应的是否是文件
boolean r3 = aFile.isFile();
System.out.println(r3);
 //public boolean isDirectory():判断File对应的是否是文件夹
boolean r5 = aFile.isDirectory();
System.out.println(r5);
//public String getName():获取文件名,包含后缀
String aName = aFile.getName();
System.out.println(aName);
//public long length():获取文件的长度(注意:只能让文件去调用!如果调用方法的是文件夹,则结果不准确)
long aLength = aFile.length();
System.out.println(aLength);
//public long lastModified():返回文件的上一次修改时间的时间毫秒值
long aTime = aFile.lastModified();
System.out.println(aTime);
//可以使用SimpleDateFormat将时间毫秒值转成指定格式的字符串
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(aTime);
System.out.println(str);
  //public String getPath():获取创建File对象时提供的路径
 String aPath = aFile.getPath();
System.out.println(aPath);
//public getAbsolutePath():获取绝对路径
String fAbsolutePath = f.getAbsolutePath();
System.out.println(fAbsolutePath);
  1. File类创建文件的功能
    目标:掌握文件创建和删除功能的使用在这里插入图片描述
//1.需求:在 C:\Users\志\Desktop\test 下创建 b.txt 文件
File bFile = new File("C:\\Users\\\\Desktop\\test\\b.txt");
boolean r1 = bFile.createNewFile();
System.out.println("b.txt是否创建成功:" + r1);
 //需求:在 C:\Users\志\Desktop\test\resource下创建a和b文件夹,其中b在a中!
//注意:此时a和b都不存在,是多级文件夹
File bDirectoryFile = new File("C:\\Users\\志\\Desktop\\test\\resource\\a\\b");
//尝试用单级文件夹创建
 boolean r3 = bDirectoryFile.mkdir();
System.out.println("a和b文件夹是否创建成功:" + r3);
//尝试用多级文件夹创建
 boolean r4 = bDirectoryFile.mkdirs();
System.out.println("a和b文件夹是否创建成功:" + r4);
//4.需求:在 C:\Users\志\Desktop\test\resource 下创建c文件夹
File cFile = new File("C:\\Users\\志\\Desktop\\test\\resource\\c");
//尝试用mkdirs创建单级
boolean r5 = cFile.mkdirs();
System.out.println("c文件夹是否创建成功:" + r5);
//结论:不管是创建单级还是多级,都建议使用mkdirs方法!
  1. File类删除文件的功能
    (注意:delete方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站.)
    在这里插入图片描述
 //5.需求:删除b.txt文件
boolean r6 = bFile.delete();
System.out.println("b.txt文件是否删除成功:" + r6);
//6.需求:删除resource文件夹
 boolean r7 = resourceFile.delete();
System.out.println("resource文件夹是否删除成功:" + r7); //删除失败:因为文件夹不是空的!

//7.需求:删除b文件夹
boolean r8 = bDirectoryFile.delete();
System.out.println("b文件夹是否删除成功:" + r8);
        //注意:删除的文件不走回收站!
  1. File类提供的遍历文件夹的功能
    在这里插入图片描述
 //1.需求:遍历 C:\Users\志\Desktop\test 文件夹,拿到它的一级路径下的所有文件/文件夹名字
File testFile = new File("C:\\Users\\志\\Desktop\\test");
String[] testListName = testFile.list();
System.out.println(Arrays.toString(testListName));

使用listFiles方法时的注意事项:
当主调是文件,或者路径不存在时,返回null
当主调是空文件夹时,返回一个长度为0的数组
当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回
当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
当主调是一个文件夹,但是没有权限访问该文件夹时,返回null

案例

需求:从D:盘中,搜索“QQ.exe” 这个文件,找到后直接输出其位置。
分析:
先找出D:盘下的所有一级文件对象
遍历全部一级文件对象,判断是否是文件
如果是文件,判断是否是自己想要的
如果是文件夹,需要继续进入到该文件夹,重复上述过程

/**
     * 定义方法:从指定的文件夹中查询指定的文件
     * 明确参数:File 要查询的文件夹,String 要查询的文件名,ArrayList 存储查询到的文件
     * 明确返回值:查到的文件都放到了集合中,所以不需要返回值
     */
    public static void findFileByName(File src, String name, ArrayList<File> list) {
        //遍历src这个文件夹,拿到它的一级文件
        File[] files = src.listFiles();

        //判断files是否为null(防止src没有权限,或者是一个文件!)
        if (files != null) {
            //遍历files
            for (File file : files) {
                //判断file是否是文件
                if (file.isFile()) {
                    //是文件,就获取名字,进行对比
                    if (file.getName().equals(name)) {
                        //找到了,把文件存入集合
                        list.add(file);
                    }
                } else {
                    //是文件夹,进入继续寻找,还是上面的逻辑!开始递归,查询file
                    findFileByName(file, name, list);
                }
            }
        }
    }
public static void main(String[] args) {
//1.键盘录入要查询的文件名
        Scanner sc = new Scanner(System.in);
        sc.useDelimiter("\n");
        
        System.out.println("请输入文件名:");
        String fileName = sc.next();
        
        System.out.println("请输入要查询的文件夹:");
        String path = sc.next();

        //调用方法
        ArrayList<File> list = new ArrayList<>();
        findFileByName(new File(path), fileName, list);

        //判断是否查到
        if (list.size() == 0) {
            System.out.println("没有找到指定文件!");
        } else {
            for (File file : list) {
                System.out.println(file);
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值