Java笔记 IO —— File

本文详细介绍了Java中的File类,包括其构造方法、文件与目录操作(如createNewFile(), mkdir(), mkdirs(), delete(), renameTo()),以及获取文件信息(getAbsolutePath(), getName(), length(), lastModified())的方法。通过实例演示了如何遍历目录和使用文件名称过滤器查找特定文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java中用File类来抽象的表示硬盘上的各种文件,File是文件和目录(文件夹)路径名的抽象表现形式

File类的构造方法:
  1. File(String pathname)
  2. File(String parent,String child)
  3. File(File parent,String child)
import java.io.File;

public class Demo1 {
    public static void main(String[] args) {
        //public File(String pathname)
        //将文件路径D:\java\a.txt封装成一个File对象
        File file1 = new File("D:\\java\\a.txt");
        System.out.println(file1); //D:\java\a.txt

        //public File(String parent,String child)
        //根据一个目录和一个子文件或目录得到一个File对象
        File file2 = new File("D:\\java","a.txt");
        System.out.println(file2); //D:\java\a.txt

        //public File(File parent,String child)
        //根据一个父的File对象和一个子文件或目录得到一个File对象
        File file3 = new File("D:\\java"); //父的File对象
        File file4 = new File(file3,"Demo"); //子的目录
        System.out.println(file4); //D:\java\Demo
    }
}

File类的创造功能

public boolean createNewFile()
public boolean mkdir()
public boolean mkdirs()

public class Demo2 {
    public static void main(String[] args) {
        //createNewFile()创建一个新的文件
        //如果要创建的文件已经存在,那么既不会创建也不会报错
        //如果要创建的文件所在的目录不存在则会报错
        File file1 = new File("D:\\java\\b.txt");
        try {
            file1.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

package review.FileDemo;

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

public class Demo2 {
    public static void main(String[] args) {
        //mkdir()在指定目录下创建文件夹
        //比如在D:\java目录下创建文件夹demo1
        File file2 = new File("D:\\java\\demo1");
        //要创建的文件夹已经存在时不会创建
        //前置目录不存在或者错误时不会创建
        //创建成功返回true,创建失败或没有创建则返回false
        System.out.println(file2.mkdir());


		//mkdirs()创建多级文件夹
        File file3 = new File("D:\\java\\test1\\test2\\test3");
        //创建成功返回true,创建失败返回false
        System.out.println(file3.mkdirs());
    }
}

在这里插入图片描述
在这里插入图片描述
注意:

package review.FileDemo;

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

public class Demo2 {
    public static void main(String[] args) {
        //注意分辨创建的是文件还是文件夹
        //创建文件的时候需要跟上后缀名
        //如果创建文件时加上后缀名,后缀名部分会被认为是文件夹名字的一部分
        File file4 = new File("D:\\java\\test1.txt");
        try {
            System.out.println(file4.createNewFile());
        } catch (IOException e) {
            e.printStackTrace();
        }
        File file5 = new File("D:\\java\\test2.txt");
        System.out.println(file5.mkdir());


    }
}

在这里插入图片描述
在这里插入图片描述
结果是分别创建了一个叫 test1.txt 文件和一个叫 test2.txt 的文件夹
需要注意的是,win10中,文件夹与文件不能同名

删除功能

public boolean delete()

package review.FileDemo;

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

public class Demo3 {
    public static void main(String[] args) {
    //一、删除文件
        File file1 = new File("D:\\java\\test1.txt");
        try {
            file1.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //删除成功返回true,删除失败返回false
        System.out.println(file1.delete()); //true

	//二、删除文件夹
        File file2 = new File("D:\\java\\test1\\test2");
        file2.mkdirs();
        //只有文件夹中为空时才能删除文件夹
        File test1 = new File("D:\\java\\test1");
        System.out.println(test1.delete()); //false,删除失败因为test1文件夹不为空
        
        File test2 = new File("D:\\java\\test2");
        System.out.println(test2.delete()); //false,删除失败因为路径不存在
        
        File test3 = new File("D:\\java\\test1\\test2");
        System.out.println(test3.delete()); //true,删除成功
    }
}

重命名功能:

public boolean renameTo(File dest)

import java.io.File;

public class Demo4 {
    public static void main(String[] args) {
        //renameTo将file1对象的名字改为file2的对象名
        File file1 = new File("D:\\java\\a.txt");
        File file2 = new File("D:\\java\\b.txt");
        //修改成功返回true,失败为false
        file1.renameTo(file2);
    }
}

判断功能

public boolean isDirectory()
public boolean isFile()
public boolean exists()
public boolean canRead()
public boolean canWrite()
public boolean isHidden()

package review.FileDemo;

import java.io.File;

public class Demo5 {
    public static void main(String[] args) {
        File file1 = new File("D:\\java\\a.txt");

        //判断是不是文件夹
        System.out.println(file1.isDirectory()); //false

        //判断是不是文件
        System.out.println(file1.isFile()); //true
 
        //判断文件是否存在
        System.out.println(file1.exists()); //true

        //判断是否可读
        System.out.println(file1.canRead()); //true

        //判断是否可写
        System.out.println(file1.canWrite()); //true

        //判断是否隐藏
        System.out.println(file1.isHidden()); //false

        //当file1不存在时,上面全是false
    }
}

获取功能一

public String getAbsolutePath()
public String getPath()
public String getName()
public long length()
public long lastModified()

package review.FileDemo;

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

public class Demo6 {
    public static void main(String[] args) {
        //在idea的当前项目的src文件夹中创建test.txt文件
        File file = new File("src\\test.txt");
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //getAbsolutePath() 获取绝对路径,也就是获取完整路径
        System.out.println(file.getAbsolutePath()); //F:\idea2018.1\workplace\Demo\src\test.txt

        //getPath() 获取相对路径
        System.out.println(file.getPath()); //src\test.txt

        //getName() 获取文件名称
        System.out.println(file.getName()); //test.txt

        //long length() 获取文件的字节大小
        System.out.println(file.length()); //0

        //long lastModified() 指定文件最后一次被修改的时间戳
        System.out.println(file.lastModified()); //1634645504934

    }
}

获取功能二

public String[] list()
public File[] listFiles()

package review.FileDemo;

import java.io.File;

public class Demo7 {
    public static void main(String[] args) {
        File file = new File("D:\\java\\Demo\\file1");
        //String[] --- list()
        //获取指定目录下的所有文件和文件夹的名称,并将所有名称放入String类型数组
        String[] list = file.list();
        for(String s : list){
            System.out.println(s);
        }

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

        //File[] --- listFiles()
        //将指定目录下的所有文件和文件夹都放入File类型数组
        File[] files = file.listFiles();
        for(File file1 : files){
            System.out.println(file1.getName());
        }

    }
}

在这里插入图片描述

例子

判断file1文件夹下面有没有以JPG为后缀名结尾的文件,如果有则打印出来

方法一、遍历File数组
package review.FileDemo;

import java.io.File;

public class Demo8 {
    public static void main(String[] args) {
        File file = new File("D:\\java\\Demo\\file1");

        File[] files = file.listFiles();
        for(File file1 : files){
            if(file1.isFile()){
                if(file1.getName().endsWith(".JPG")){
                    System.out.println(file1.getName());
                }
            }
        }
    }
}

在这里插入图片描述

方法二、文件名称过滤器
package review.FileDemo;

import java.io.File;
import java.io.FilenameFilter;

public class Demo8 {
    public static void main(String[] args) {
        File f = new File("D:\\java\\Demo\\file1");
        //方法二
//获取file1目录下所有的文件和文件夹名称,并放入String类型数组中
//将每一个对象名称,按照FilenameFilter判断的结果决定是否加入数组
        String[] list = f.list(new FilenameFilter() {
            @Override
//这里是一个boolean类型的判断方法,返回true则将文件或文件夹名称加入数组,否则不添加
            public boolean accept(File dir, String name) {
                File file1 = new File(dir,name);
//两个判断条件,当前File对象是一个文件,并且后缀名为.JPG
                boolean b1 = file1.isFile();
                boolean b2 = file1.getName().endsWith(".JPG");
                return b1 && b2;
            }
        });
        for(String s : list){
            System.out.println(s);
        }

    }
}

结果跟方法一结果相同

这里是list的源码,首先this.list()也就是用一开始的File对象 f.list(),生成当前目录的所有文件和文件夹名字放入String names[]数组中
实现接口的具体方法public boolean accept(File dir, String name)的参数列表中
File dir就是this,也就是 File f 对应的文件目录
String name 就是names[ i ] 也就是当前放入accept方法里面进行筛选判断的文件对象,如果返回true则将此对象放入数组中

list()方法最后返回的是一个数组

public String[] list(FilenameFilter filter) {
        String names[] = list();
        if ((names == null) || (filter == null)) {
            return names;
        }
        List<String> v = new ArrayList<>();
        for (int i = 0 ; i < names.length ; i++) {
            if (filter.accept(this, names[i])) {
                v.add(names[i]);
            }
        }
        return v.toArray(new String[v.size()]);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一纸春秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值