Day_17 IO流File类

本文详细介绍了Java中的递归算法及其应用,包括在快速排序中的作用。同时,深入探讨了File类的使用,如构造方法、文件创建、删除、获取属性以及遍历文件夹等功能。此外,还讲解了I/O流的基本概念,涉及字节流和字符流的区别,并以FileOutputStream和FileInputStream为例,阐述了数据的读写操作。
摘要由CSDN通过智能技术生成

递归算法
递归 : 递进回归
	代码中的体现: 方法内部调用方法本身
	
生活中的案例:
	从前有座山,山里有座庙,庙里有个老和尚,老和尚给小和尚讲故事...
        从前有座山,山里有座庙,庙里有个老和尚,老和尚给小和尚讲故事...
        	从前有座山,山里有座庙,庙里有个老和尚,老和尚给小和尚讲故事...
        		从前有座山,山里有座庙,庙里有个老和尚,老和尚给小和尚讲故事...
        
    学编程 -> 赚钱 -> 娶媳妇 -> 生娃娃.. 
        学编程 -> 赚钱 -> 娶媳妇 -> 生娃娃..  
        	学编程 -> 赚钱 -> 娶媳妇 -> 生娃娃..  
        		学编程 -> 赚钱 -> 娶媳妇 -> 生娃娃..  
    俄罗斯套娃,文件的遍历    
递归算法的前提
//先找规律
1. 必须定义方法
2. 必须有出口
3. 定义的方法必须有形参
4. 在方法内部调用方法自己时,传入的参数要发生变化 --> 变化要往出口方向前进
5. 递归的次数不要太多
递归的内存图

请添加图片描述

快速排序的原理

请添加图片描述

File类
File:  计算机中所有文件和文件夹的类

结论 : 计算机中要么是文件要么是文件夹
File类的构造方法和自定义常量
*File(String pathname) : 传入一个文件/文件夹路径,File对象指向这个文件/文件夹;
    
File(String parent, String child) : 以子父路径的形式去表示File对象 (String表示)
*File(File parent, String child) : 以子父路径的形式去表示File对象 (父路径File对象的形式表示)    
    
//File对象的创建,File只指向路径结尾的文件和文件夹,不代表整个路径    
    
    File对象的创建做了哪些事情:
        1. 创建了对象
        2. 开辟了内存空间
        3. 让file对象指向了路径结尾的文件/文件夹
        //文件不存在没有创建新文件
        
File.pathSeparator = ;
File.pathSeparatorChar = ;
File.separator = \
File.separatorChar = \        
File类的创建功能
* boolean createNewFile(): 创建文件 

boolean mkDir(): 创建单级文件夹
* boolean mkDirs(): 创建单级文件夹或者多级文件夹
相对路径和绝对路径
//当你要表示的文件和文件夹在项目路径下,就可以使用相对路径去表示文件/文件夹路径 --> 简化书写

绝对路径 : 绝对能找到文件/文件夹的路径 --> 完整路径
	特点 : 以盘符开头
	
//相对路径 : 理解参照物	IDEAEclipse软件的相对路径起点: Project
相对路径 : 	以参照物为起点,向路径内寻找文件/文件夹
	特点 : 不以盘符开头

寄快递:
绝对路径 : 地球:\\亚洲\\中国\\湖北\\武汉\\洪山\\雄楚大道\\金地中心城\\6号楼\\4楼\\402\\李博闻
相对路径 : //参照物: 金地中心城
	6号楼\\4楼\\402\\李博闻
File类的删除功能
boolean delete(): 删除文件/文件夹, 不走回收站!!
File类的获取功能
* String getName() : 获取文件/文件夹的名称
* long length() : 获取文件的大小(所占字节数)
 
  String getAbsolutePath() : 以字符串的形式返回file对象指向的文件/文件夹的绝对路径
  File getAbsoluteFile() :File对象的形式返回file对象指向的文件/文件夹的绝对路径    
  
  String getParent()  : 以字符串的形式返回file对象指向的文件/文件夹的父路径
  File getParentFile()  :File对象的形式返回file对象指向的文件/文件夹的父路径
  
  String getPath()  : 获取创建File对象时,传入的文件/文件夹的路径(File类的toString方法内部就是在调用getPath)
     
   long lastModified() : 获取File对象指向的文件/文件夹最后一次修改的时间 -> 毫秒值  
File类的判断功能
* boolean exists() : 判断File对象指向的文件/文件夹是否存在!!
* boolean isFile() : 判断File对象指向的文件/文件夹是否是文件
* boolean isDirectory() : 判断File对象指向的文件/文件夹是否是文件夹   

boolean isAbsolute()  : 判断创建File对象时传入的是否是绝对路径
boolean isHidden() : 判断file对象指向的文件/文件夹是否是隐藏文件/文件夹
文件夹的遍历功能
* File[] listFiles() : 把一个文件夹中所有的文件/文件夹获取到,存入到File[]数组中 -> 只能获取当级文件夹

如果file对象指向的是一个文件,那么方法的返回值是null --> 发生空指针异常
如果file对象指向的是一个空文件夹,那么方法会返回一个内容为0的空数组  -> 不会出现空指针异常

* File[] listFiles(FileFilter filter)  
    FileFilter filter: 文件夹过滤器 --> 接口
    	有且仅有一个抽象方法: boolean accept(File file) -> 重写后就是对file对象进行某种判断
    		如果返回值是true,通过 / 如果返回值是false,不通过
I/O概述
I/O流 技术 : 实现了Java代码和硬盘上文件的数据交互 --> 数据的永久存储
I : input -> 输入
O : output -> 输出
流 : 水流

搞清楚什么时候用输入流/什么时候用输出流 ?  参照物: 当前Java文件
    代码数据 ---> 文件内 : 输出流
    文件内容 ---> 代码中 : 输入流
    
I / O 流的分类 :     
	流向分类 : 输入流和输出流  Input/ReaderOutput/Writer
	操作的文件类型分类: 
		字节文件(计算机中所有的文件都是字节文件) :Stream结尾 -> 字节流;
		字符文件(字节文件中有一类文件,文件中都是字符 -> txt,java,xml,html,js,md....) :Reader/Writer结尾的流 --> 字符流
			//如何分辨字符文件 : 用windows自带的记事本工具打开且不"乱码"的文件就是字符文件
			
InputStream : 字节输入流
BufferedWriter : 高效字符输出流
OutputStreamWriter : 字符输出流 -> 转换流: 把字节流转换成字符流的流
	// 字符流的本质就是 : 字节流 + 编码格式
字节流体系结构
字节流的根节点: InputStream/OutputStream -> 抽象类

子类 :
文件字节流(普通字节流) : FileInputStream/FileOutputStream
高效字节流: BufferedInputStream/BufferedOutputStream
FileOutputStream
FileOutputStream : 文件字节输出流

构造方法:
	FileOutputStream(String name) : 传入文件的字符串类型路径,让字节输出流对象指向这个文件;
    FileOutputStream(File file) : 传入文件的File类型路径,让字节输出流对象指向这个文件; 
    
    字节输出流对象的创建做了哪些事情:
        1. 创建了对象
        2. 开辟了内存空间
        3. 文件不存在会帮你创建文件,文件存在会创建新文件覆盖原文件
        4. 让输出流对象指向路径结尾的文件 (这里只能是文件)
FileOutputStream写数据的方法
写数据的方法 : void write -> 写的是字节

	 * void write(int b) : 一次写一个字节
 	 void write(byte[] b)  : 一次写一整个字节数组
     * void write(byte[] b, int off, int len)  : 一次写一个字节数组的一部分
     	int off -> int startIndex : 起始索引
     	int length -> 写几个
     	
    如何写字符串 ? String -> 字节数组
        byte[] getBytes()
    如何写换行符 ?  "\r\n".getBytes()
    如何追加写 ? boolean append 追加写开关
        FileOutputStream(String name, boolean append)
        FileOutputStream(File file, boolean append)     	
FileInputStream
FileInputStream : 普通字节输入流

构造方法:     //输入流指向的文件必须存在!!
	FileInputStream(String name) 
    FileInputStream(File file)   
        //输入流没有追加读
FileInputStream读数据的方法
读数据的方法 : int read -> 读的是字节
	* int read() : 一次读一个字节 -> 返回值是读到的字节
    * int read(byte[] b) : 一次读一个字节数组
    	//byte[] b : 用来存储每次读到的数据
    int read(byte[] b, int off, int len)  : 一次读一个字节数组的一部分
    
//只要文件内有换行符,那么read方法就可以读到换行符    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值