Java I/O 流

本文深入讲解Java中文件操作的基本概念,包括文件的创建、删除、读取等操作,以及如何使用File类进行路径管理和文件属性获取。同时,文章还探讨了文件过滤器的使用和递归遍历目录的方法。

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

存储了解:
当我们在执行保存这个操作时,就是将数据持久化保存(二进制),用不同的工具可以以不同的解析方式解析文件(使我们可见),如:用记事本打开图片就会出现很多文字

数据在内存中是临时存储,CPU进行存储,将数据存到硬盘上就可以持久存储
数据出内存就叫做输出,进入内存就叫做输入
软件中想要数据持久化存储,这样的 操作肯定是基于操作系统的。同样的在Java 中,
Java -----> JVM-------->操作系统

I/O 输入输出对象

持久化存储在硬盘上的体现————文件(有很多的属性)
在Java 中就将文件封装成类 File :描述文件和目录文件
File:
1.构造函数:

 //1.File 的构造函数
        String pathname = "E:\\java\\File";
        //File  file = new File(pathname);//传入文件地址字符串
        //将E:\java\File  这个文件包装成对象,如果这个文件不存在,那么会先创建再包装成对象
        
       // File  file = new File("E:\\java","File");//传入父地址和子地址
        
        File f = new File("E:\\java");
        File  file = new File(f,"File");

构造函数中可以传入:地址常量,地址变量(都是字符串型)/封装的文件对象
为了提高程序的跨平台性:可以使用File 类中的文件分隔符字段 pathSeparator
路径可以是绝对路径也可以是相对路径(在当前程序运行的文件夹下)
2.基本方法:

  //基本方法
        File F = new File("src");								//传入的是相对路径,在程序运行的同一个文件夹中
        String path = F.getPath();							   //获取的使File 中封装的路径
        String absPathName = F.getAbsolutePath();		      //获取绝对路径
        String FileName = F.getName();						 //获取时间
        long size = F.length();							    //获取大小
        long time = F.lastModified();					   //最后一次修改的时间,很有用的一个数据
        //得到的时间是毫秒值   格式化输出
        String t = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG).format(time);
       

对于文件的创建,删除,判断

//创建文件
        File  file = new File("E:\\JAVA\\file");
        boolean b1 = file.createNewFile();//当且仅当路径存在且文件不存在时,创建才会成功
       System.out.println(b1);
        //删除
       // boolean b2 = file.delete();//删除不去回收站,要谨慎使用
        //System.out.println(b2);
        //判断文件夹是否存在
        boolean b3 = file.exists();
        System.out.println(b3);

对于文件夹的创建,删除,判断

 //对于文件夹
        File f = new File("E:\\JAVA\\HAHA\\xhixi\\jiji\\XIXI");
        //boolean b4 = f.mkdir();
      boolean b5 = f.mkdirs();
      boolean b6 = f.delete();//只能删除最后一个文件夹,当文件夹正在使用时是无法删除的,文件夹中为空才能删除
        boolean b7 = f.isFile();//判断是否为文件
        boolean b8 = f.isDirectory();//判断是否为文件夹(目录)

注意在同一路径下,文件夹或者是文件不区分大小写。判断是文件还是文件夹的前提是存在
过滤器:
1.文件名过滤器:实现接口 FilenameFilter 重写 accept() 方法
2.文件过滤器(如:只要目录下的文件夹) :实现接口 FileFilter 重写 accept()
将过滤器传入 获取目录的函数中

ListFile  源码//根据名字过滤
    public File[] listFiles(FilenameFilter filter) {
        String ss[] = list();//获取目录名称
        if (ss == null) return null;//增强健壮性,先判空
        ArrayList<File> files = new ArrayList<>();//创建存储文件对象的集合
        for (String s : ss)
            if ((filter == null) || filter.accept(this, s))
                files.add(new File(s, this));//将文件重新封装成对象
        return files.toArray(new File[files.size()]);//将集合转化为数组

练习:获取所有的文件
1.递归,遍历获取到的file 如果是文件夹,则获取该文件夹中的目录。是文件夹就获取目录。

 for(File f : files){
            if(f.isDirectory()){
                System.out.println("dir : "+f.getName());
                getFile(f);//递归
            }
            else {
                System.out.println("file : " + f.getName());
            }

2.基于递归的方法,一旦文件嵌套过深,就容易发生溢出,所以不使用递归和for 循环嵌套

  • 每遍历到一个目录,不对其进行遍历,而是将他先临时存储起来
    相当于将所有的目录都存储起来(但是被遍历过的目录就要从容器中删除)
  • 再遍历容器取到的就是目录,然后再对目录进行遍历
  • 对从容器中取到的目录遍历时发现目录下还有目录,一样在存储到容器中
    (容器应该使用LinkedList 符合队列)
    将目录存储到容器中,在容器中进行遍历,遍历到的子目录有存储到容器中,直到容器为空。此时就获取了全部文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值