java IO流【file类】

File类简介

1.1 FIle类的作用

  • File类是Java提供的针对磁盘中的文件或目录转换对象的包装类。
  • 一个File对象而可以代表一个文件或目录,File对象可以实现获取文件和目录属性等功能可以实现对文件和目录的创建,删除等功能。

1.2 File类操作目录与文件的常用方法

1.2.1 针对文件的操作方法

方法说明
createNewFile()常见新文件
delet()直接从磁盘上删除
exists()查询磁盘中的文件是否存在
getAbsolutePath()获取绝对路径
getPath()获取相对路径
getName()获取文件名,相当于调用了一个toString方法
isFile()判断是否是文件
length()查看文件中的字节数
idHidden()测试这个抽象路径名是否是一个隐藏文件。是隐藏的返回true,否则返回false

1.2.2 针对目录的操作方法

方法说明
exisits ()查询当前目录是否存在
isDirectory()判断当前路径是否为目录
mkdir()创建目录
getPareFile()获取当前目录的父级目录
list()返回一个字符串数组,包含目录中的文件和目录的路径名
listFile()返回一个File数组,表示用此抽象路径名表示目录中的文件

1.2 File类的基本操作

案例一

package File;

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

/**
 * @author 缘友一世
 * date 2022/10/17-8:35
 */
public class FileDemo {
    public static void main(String[] args) throws IOException {
        //使用相对路径,默认的情况下创建File对象在src文件的同一目录下【这里即目录basic grammar\\】
        File file = new File("basic grammar\\src\\File类\\example.txt");
        boolean newFile = file.createNewFile();
        if(newFile==true) {
            System.out.println("创建文件example.txt成功!");
        }else {
            System.out.println("创建文件example.txt失败!");
        }
        System.out.println("获取文件名:"+file.getName());
        System.out.println("判断是否是一个文件:"+file.isFile());
        System.out.println("判断是不是一个隐藏文件:"+file.isHidden());
        System.out.println("获取文件的字节数:"+file.length());
        System.out.println("获取文件的相对路径:"+file.getPath());
        System.out.println("获取文件的绝对路径:"+file.getAbsoluteFile());
        System.out.println("删除文件example.txt:"+file.delete());
        System.out.println("判断文件example.txt是否存在:"+file.exists());

    }
}

在这里插入图片描述

案例二

package File;

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

/**
 * @author 缘友一世
 * date 2022/10/17-8:55
 */
public class DirectoryDemo {
    public static void main(String[] args) throws IOException {
        File file = new File("basic grammar\\src\\File类\\example");
        File file2 = new File("basic grammar/src/File类/father/son");
        //file.mkdir()创建单级目录
        //file.mkdirs()创建多级目录
        System.out.println("创建单级目录:"+file.mkdir());
        System.out.println("判断单级目录是否存在:"+file.exists());
        System.out.println("判断是不是一个目录"+file.isDirectory());

        //通过file.getParent()获取父级目录的名字
        System.out.println("通过file.getParent()获取父级目录:"+file.getParent());
        //通过获取父级目录的对象,获取父级目录的名字
        System.out.println("通过file.getParentFile()获取父级目录:"+file.getParentFile().getName());

        //为以下测试创建的文件
        File file1 = new File("basic grammar\\src\\File类\\example\\a.txt");
        boolean newFile = file1.createNewFile();
        if(newFile==true) {
            System.out.println("创建文件example.txt成功!");
        }else {
            System.out.println("创建文件example.txt失败!");
        }
        System.out.println("------------------------file.list()");
        //只是返回当前目录的所有文件
        String[] arrFile=file.list();
        for(String x:arrFile) {
            System.out.println(x);
        }
        System.out.println("------------------------file.listFiles()");

        //返回文件名和绝对路径
        File[] files = file.listFiles();
        for(File x:files) {
            System.out.println(x);
        }

        System.out.println("------------------------");
        System.out.println("删除文件:"+file1.delete());
        System.out.println("删除单级目录:"+file.delete());
        System.out.println("创建多级目录:"+file2.mkdirs());
        System.out.println("删除多级目录:"+file2.getParentFile().delete());


    }
}

在这里插入图片描述

遇到的问题及思考

问题:删除非空的目录失败
  • 如果将删除文件的代码注释掉,就会出现,删除单级目录失败。
 		System.out.println("------------------------");
        //System.out.println("删除文件:"+file1.delete());
        System.out.println("删除单级目录:"+file.delete());
        System.out.println("创建多级目录:"+file2.mkdirs());
        System.out.println("删除多级目录:"+file2.getParentFile().delete());
究因:delete的详细解析
  1. delete()方法可用于删除文件或空目录/文件夹,如果文件被删除,delete()方法返回true,如果文件不存在则返回false。
  2. 如果删除目录,delete()方法检查目录是否为空,如果目录为空,则删除目录,否则delete()方法不会执行任何操作并返回false,所以在这种情况下,必须递归删除所有文件,然后再删除目录。
  3. 删除非空目录的另一种方法是使用Files.walkFileTree()方法,在这种方法中,可以逐个处理所有文件,并在单个文件对象上调用delete()方法。
  4. Files.walkFileTree()方法API文档
    在这里插入图片描述
解决方法一:非空变空法
  • 将目录下的温江全部删除,使目录变为空目录,再进行删除。
 	File[] listFiles = file.listFiles();
    for(File x:listFiles) {
        System.out.println("Deleting "+x.getName());
        x.delete();
    }
     System.out.println("删除单级目录:"+file.delete());    
解决方法二:Files.walkFileTree()
//方法三:使用Files.walkFileTree()方法
        Files.walkFileTree(Paths.get("basic grammar\\src\\File类\\example"),new SimpleFileVisitor<Path>() {
            //进入文件夹之前
            @Override
            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
                System.out.println("进入文件夹===>"+dir);
                return super.preVisitDirectory(dir, attrs);
            }

            //遍历文件
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                //遍历文件时删除文件
                System.out.println("删除文件=>"+file.getFileName());
                Files.delete(file);
                return super.visitFile(file, attrs);
            }

            //进入文件夹之后
            @Override
            public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
                System.out.println("退出文件夹===>"+dir);
                Files.delete(dir);//注意在这一步时就删除了basic grammar\src\File类\example目录
                return super.postVisitDirectory(dir, exc);
            }
        });
        //System.out.println("删除单级目录:"+file.delete());
        System.out.println("example是否存在:"+file.exists());//已经删除过了,打印false

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值