安安静静学JAVA(十一)

File

概述

java.io.File 类是文件和文件夹路径名的表示形式,主要用于文件和目录的创建、查找和删除等操作。

构造方法

  • public File(String pathname):通过指定的字符串转换抽象路径名来创建新的File对象
  • public File(String parent, String child):将父类的字符串路径名和子类的字符串路径名合并,并创建新的File实例
  • public File(File parent, String child):从父抽象路径名和子路径的字符串合并,创建新的File实例

对绝和相对路径

  • 绝对路径:从盘符开始的路径,这是一个完整的路径
  • 相对路径:相对于项目的路径,这是一个便捷的路径,开发中经常使用。

常用方法

  • 获取功能的方法

    • public String getAbsolutePath():返回此File的绝对路径名字字符串
    • public String getPath():将此File转换成路径字符串。可以获取构造方法的字符串
    • public String getName():返回此File表示的文件或者目录名称
    • public long length():返回由此File表示的文件的长度,只能获取文件的字节个数,不能获取文件夹
  • 创建和删除功能的方法:

    • public boolean CreateNewFile():当创建此名称文件不存在,会自动创建一个新的空文件
    • public boolean mkdir():创建新的目录(单级文件夹)
    • public boolean mkdirs():创建新的目录包括不存在的父级目录(多级文件夹)
    • public Boolean delete():删除文件或目录(1.回收站找不到; 2.删除任何文件都可以,不能删除空的文件夹)
  • 判断功能的方法:

    • public boolean existe():此方法表示文件或者目录是否实际存在
    • public boolean isDirectory():此方法表示的是否为目录
    • public boolean isFile():此方法表示的是否为文件

目录遍历

  • public String[] list() :返回一个String数组,表示该File目录中所有的子文件或者目录
  • public File[] listFiles() : 返回一个File数组,表示该File目录中的所有子文件或目录
  • public File[] listFiles(FileFilter filter):将文件夹中的每一个文件和文件夹,放到FileFilter中accept方法的参数中,调用accept方法满足过滤器指定条件,代表accept方法返回的是true

递归

概述:指在当前方法内调用自己的这种现象。

格式:

在这里插入图片描述

递归求和

public class DiGuiDemo {
	public static void main(String[] args) {
		//计算1~num的和,使用递归完成
		int num = 5;
      	// 调用求和的方法
		int sum = getSum(num);
      	// 输出结果
		System.out.println(sum);
		
	}
  	/*
  	  通过递归算法实现.
  	  参数列表:int 
  	  返回值类型: int 
  	*/
	public static int getSum(int num) {
      	/* 
      	   num为1时,方法返回1,
      	   相当于是方法的出口,num总有是1的情况
      	*/
		if(num == 1){
			return 1;
		}
      	/*
          num不为1时,方法返回 num +(num-1)的累和
          递归调用getSum方法
        */
		return num + getSum(num-1);
	}
}

递归阶乘

/*
    5! : 5的阶乘
    5! = 5 * 4 * 3 * 2 * 1
         5 * 4!
             4 * 3!
                 3 * 2!
                     2 * 1!
                         1! = 1

    n! = n * (n-1)!


    (byte) 130 = -126


 */
public class Demo02 {
    public static void main(String[] args) {
        System.out.println(fun(5));
        System.out.println(fun(6));
        System.out.println(fun(7));
        System.out.println(fun(8));
        System.out.println(fun(3000));
    }

    /**
     * 此方法用来求n的阶乘
     * <p>
     * 我们在写递归方法的时候, 不要想好多层
     * 只需要写好一层就可以了
     */
    public static int fun(int n) {
        // 出口
        if (n == 1) {
            return 1;
        }

        // n! = n * (n-1)!
        return n * fun(n - 1);
    }
}

文件搜索

/**
 * 打印文件夹中所有文件, 包含文件夹中的文件
 */
public class Demo03 {
    public static void main(String[] args) {
        printFile(new File("C:\\"));
    }

    /**
     * 此方法用于打印文件夹中的所有文件
     */
    public static void printFile(File file) {
        // 遍历文件夹, 获取其中的每一个文件和文件夹
        File[] subFiles = file.listFiles();
        // subFiles为null, 我们没有办法, 惹不起, 躲得起
        if (subFiles != null) {
            for (File subFile : subFiles) {
                // 如果是文件: 打印
                if (subFile.isFile()) {
                    System.out.println(subFile);
                } else {
                    // 如果是文件夹: 打印文件夹中的所有文件  -> 递归~
                    printFile(subFile);
                }
            }
        }
    }
}

递归出现内存溢出原理

在这里插入图片描述

IO

什么是IO?

生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrl+s ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。

我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入input输出output ,即流向内存是输入流,流出内存的输出流。

Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。

**流向的分析, 站在内存的角度**

IO分类

在这里插入图片描述

  • 流向划分

      • 输入流 :把数据从其他设备上读取到内存中的流。
      • 输出流 :把数据从内存 中写出到其他设备上的流。
  • 类型划分

    • 字节流

      • 字节输入流

        • 构造方法在这里插入图片描述

        • 主要方法
          在这里插入图片描述

      • 字节输出流

        • 构造方法
          在这里插入图片描述

        • 数据追加续写在这里插入图片描述

        • 常用方法在这里插入图片描述

        • 写出换行:在这里插入图片描述

    • 字符流

      • 使用字符流读取: 将字节转换成字符

使用字符流写出: 将字符转换成字节

  • 字符输入流

  • 构造方法在这里插入图片描述

  • 常用方法
    在这里插入图片描述

  • 字符输出流

  • 构造方法在这里插入图片描述

  • 常用方法在这里插入图片描述

    • 注意:
      分别使用字节流和字符流写出数据, 没有关流
      字节流可以写出
      字符流没有写出去

    因为: 字符输出流, 默认带有一块缓冲区(数组), 写出数据的时候会先写出到缓冲区中
    然后在通过一些方法, 将缓冲区中的内容, 刷出到硬盘的文件上

       缓冲区的内容刷到文件上有两个场景:
          1. 缓冲区满了
          2. 手动刷出
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值