File类概述

  • File类在包java.io.File下、代表操作系统的文件对象(文件、文件夹)。
  • File类提供了诸如:定位文件,获取文件本身的信息、删除文件、创建文件(文件夹)等功能。

File类的常用API

File类创建对象:

java 对象释放了 static 方法 内存会释放吗 java file对象释放_字节流

File对象可以定位文件和文件夹
File封装的对象仅仅是一个路径名,这个路径可以是存在的,也可以是不存在的。

File类的判断文件类型、获取文件信息功能

 

java 对象释放了 static 方法 内存会释放吗 java file对象释放_递归_02

java 对象释放了 static 方法 内存会释放吗 java file对象释放_递归_03

  •  delete方法直接删除不走回收站;如果删除的是一个文件,且文件没有被占用则直接删除。
  • delete方法默认只能删除空文件夹。

java 对象释放了 static 方法 内存会释放吗 java file对象释放_java_04

listFiles方法注意事项:

  • 当调用者不存在时,返回nul
  • 当调用者是一个文件时,返回null
  • 当调用者是一个空文件夹时,返回一个长度为0的数组
  • 当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
  • 当调用者是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏内容 

方法递归

递归的形式和特点

java 对象释放了 static 方法 内存会释放吗 java file对象释放_字节流_05

递归的算法流程、核心要素

递归算法三要素大体可以总结为:

  • 递归的公式:f(n)=f(n-1)*n;
  • 递归的终结点:f(1)
  • 递归的方向必须走向终结点

非规律化递归案例-文件搜索

案例需求:文件搜索、从C:盘中,搜索出某个文件名称并输出绝对路径。
分析:

  • 先定位出的应该是一级文件对象
  • 遍历全部一级文件对象,判断是否是文件
  • 如果是文件,判断是否是自己想要的
  • 如果是文件夹,需要继续递归进去重复上述过程

java 对象释放了 static 方法 内存会释放吗 java file对象释放_字节流_06

 

java 对象释放了 static 方法 内存会释放吗 java file对象释放_递归_07

 
非规律化递归案例-啤酒问题(略)

字符集

java 对象释放了 static 方法 内存会释放吗 java file对象释放_递归_08

案例:

java 对象释放了 static 方法 内存会释放吗 java file对象释放_java_09

 

IO流概述

java 对象释放了 static 方法 内存会释放吗 java file对象释放_字符流_10

四大抽象类:

 

java 对象释放了 static 方法 内存会释放吗 java file对象释放_字符流_11

 

 

字节流的使用

1、Filelnputstream

每次读一部分:

java 对象释放了 static 方法 内存会释放吗 java file对象释放_字符流_12

 一次性读完(方式2,jdk9开始):

java 对象释放了 static 方法 内存会释放吗 java file对象释放_字符流_13

2、 FileOutPutSteam

java 对象释放了 static 方法 内存会释放吗 java file对象释放_递归_14

java 对象释放了 static 方法 内存会释放吗 java file对象释放_字符流_15

 

java 对象释放了 static 方法 内存会释放吗 java file对象释放_递归_16

 

java 对象释放了 static 方法 内存会释放吗 java file对象释放_java_17

 

java 对象释放了 static 方法 内存会释放吗 java file对象释放_递归_18

 

java 对象释放了 static 方法 内存会释放吗 java file对象释放_字符流_19

 3、使用字节流复制文件(案例):

java 对象释放了 static 方法 内存会释放吗 java file对象释放_字节流_20

 字节流适合做一切文件数据的拷贝吗?

  • 任何文件的底层都是字节,拷贝是一字不漏的转移字节,只要前后文件格式、编码一致没有任何问题。

资源释放的方式

try-catch-finally

  • finally:在异常处理时提供finally块来执行所有清除操作,比如说IO流中的释放资源
  • 特点:被finally控制的语句最终一定会执行,除非VM退出
  • 异常处理标准格式:try..catch..finally

格式:

java 对象释放了 static 方法 内存会释放吗 java file对象释放_递归_21

 finally虽然可以用于释放资源,但是释放资源的代码过于繁琐?

JDK7和JDK9中都简化了资源释放操作(推荐JDK7)

java 对象释放了 static 方法 内存会释放吗 java file对象释放_字符流_22

注意

  • DK7以及DK9的()中只能放置资源对象,否则报错

什么是资源呢?

  • 资源都是实现了Closeable/AutoCloseable接口的类对象

java 对象释放了 static 方法 内存会释放吗 java file对象释放_递归_23

 

try-with-resource

字符流的使用

文件字符输入流:Reader
        作用:以内存为基准,把磁盘文件中的数据以字符的形式读取到内存中去。

java 对象释放了 static 方法 内存会释放吗 java file对象释放_字节流_24

 一次读(进内存)一个字符数组:

java 对象释放了 static 方法 内存会释放吗 java file对象释放_字节流_25

文件字符输入流:Writer

java 对象释放了 static 方法 内存会释放吗 java file对象释放_字符流_26

java 对象释放了 static 方法 内存会释放吗 java file对象释放_java_27

 

 写(进硬盘)字符流:

java 对象释放了 static 方法 内存会释放吗 java file对象释放_java_28

 

另:

字节流、字符流如何选择使用?

  • 字节流适合做一切文件数据的拷贝(音视频,文本)
  • 字节流不适合读取中文内容输出
  • 字符流适合做文本文件的操作(读,写)
  • File类可以定位文件:进行删除、获取文本本身信息等操作。但是不能读写文件内容。
  • IO流技术可以对硬盘中的文件进行读写