File的概述
File : 代表的是计算机中所有的文件和文件夹! -> 计算机中除了文件就是文件夹! -> true
File的构造方法
File(String pathname) : 传入文件/文件夹的路径封装一个file对象
File(String parent, String child) : 传入字符串类型的子父路径封装一个file对象
File(File parent, String child) : 传入File类型的父路径和String类型的子路径封装一个file对象
创建File对象干了啥:
1. 创建了File对象
2. 在堆内存中开辟了空间
3. 让file对象指向路径结尾的文件/文件夹
相对路径和绝对路径*
绝对路径 : 完整的文件/文件夹路径 就是绝对路径
C:\Users\Administrator\Desktop\aaa.txt -> 绝对路径
绝对路径 : 一定以盘符开头!
绝对路径 : 任何路径都可以表示
相对路径 : 以一个参照物作为起点,往内找的路径叫相对路径
相对路径: 只能找到参照物内的路径
IDEA / Eclipse : project的路径 (IO流体系中的相对路径起点)
相对路径 : 一定不是以盘符开头!
举例 :
绝对路径 : 地球:\\亚洲\\中国\\湖北省\\武汉市\\东湖高新区\\茅店山中路\\东湖网谷\\6号楼\\4楼\\尚硅谷\\404教室\\谈斌;
相对路径 : 起点->东湖网谷 注意 : 一定是往相对路径的内部去找
6号楼\\4楼\\尚硅谷\\404教室\\谈斌;
File类中的自定义常量
static String pathSeparator
static char pathSeparatorChar
static String separator
static char separatorChar
File的创建功能
*boolean createNewFile() : 根据file对象指向的文件,创建一个文件,返回创建是否成功
boolean mkdir() : 根据file对象指向的文件夹,创建一个文件夹,返回创建是否成功
*boolean mkdirs() : 可以创建多级文件夹也可以创建单级文件夹
File的删除功能(了解)
boolean delete() :删除此抽象路径名表示的文件或目录。
File的获取功能
File getAbsoluteFile() : 以File对象类型返回
String getAbsolutePath() : 以String对象类型返回
* String getName() : 获取文件/文件夹的名称
String getParent() : 以String对象类型返回
File getParentFile() : 以File对象类型返回
String getPath() : 你如何创建File对象传入的路径,就如何获取getPath方法的结果
long lastModified() : 返回file对象指向的文件/文件夹最后一次修改的时间毫秒值
long length() : 返回file对象指向的文件的大小(所占字节数)
File的判断功能
* boolean exists() : 判断file对象指向的文件/文件夹是否存在
* boolean isDirectory() : 判断file对象指向的是否是一个文件夹
* boolean isFile() : 判断file对象指向的是否是一个文件
boolean isAbsolute() : 判断创建File对象时编写路径是否是绝对路径
boolean isHidden() : 判断file对象指向的文件/文件夹是否为隐藏
File的遍历
String[] list() : 获取File对象指向的文件夹根目录下的文件/文件夹,以字符串数组的方式存储获取到的内容
File[] listFiles() : 获取File对象指向的文件夹根目录下的文件/文件夹,以File数组的方式存储获取到的内容
带过滤条件的遍历方法
File[] listFiles(FileFilter filter) :带过滤条件的遍历方法
FileFilter -> 接口 -> 文件过滤器接口
有且仅有一个抽象方法: boolean accept(File file)
重写accept方法在方法内编写过滤条件 -> true 要 false 不要
多级文件夹遍历
IO概述
IO技术: 实现了Java代码和硬盘数据进行交互!
IO是通往现实世界的桥梁,集合桥上的小汽车;
IO : Input/Output -> 输入/输出
什么时候用输入,什么时候用输出 ---> 参照物: 当前的Java代码
IO流 : 流-> 水流
通过IO流技术实现代码和文件的联通
IO流的分类:
1. 按流向分 :
输入: Input / Reader
输出: Output /Writer
2. 按操作的文件类型分 :
字节流: 可以操作计算机中所有类型的文件
XxxxxStream : 流的类名以Stream结尾的流 一定是字节流
字符流: 只能操作计算机中所有的字符文件
XxxxReader/XxxxxWriter : 流的类名以Reader/Writer结尾的流 一定是字符流
计算机中一切皆字节 --> 计算机中的文件都是字节文件
但是这一些字节文件中有一类文件占比非常大 : 字符文件(字符文件其实本质也是字节文件)
字符文件 : 如果能用windows记事本能打开不乱码的文件叫字符文件
.txt/.java/.html/.css/.js/.xml/.md ....
InputStream : 字节输入流
BufferedWriter : 高效字符输出流
PrintStream : 打印字节输出流
OutputStreamWriter : 字符输出流 -> 转换流: 把字节流转换成字符流的流
所有的流使用完毕都需要关闭流 : void close();
InputStream/OutputStream
InputStream/OutputStream : 是字节流的根节点
InputStream/OutputStream是抽象类 --> 不能创建对象
FileInputStream/FileOutputStream
FileInputStream/FileOutputStream : 普通字节输入/输出流
FileOutputStream: 文件字节输出流
构造方法:
* FileOutputStream(String name) : 传入一个字符串形式的文件路径; 此文件: 目标文件;
FileOutputStream(File file) : 传入一个File形式的文件路径; 此文件: 目标文件;
创建一个输出流对象做了什么:
1. 创建输出流对象
2. 开辟堆内存空间
3. 创建fos对象指向路径结尾的文件
4. 如果文件不存在,创建文件
5. 如果文件存在,创建新文件去覆盖老文件
FileInputStream: 文件字节输入流
构造方法:
FileInputStream(String name)
FileInputStream(File file)
输出流指向的目标文件,文件不存在会自动创建;
目标文件存在,会默认覆盖,除非打开追加写开关;
输入流指向的源文件,文件不存在会报错,源文件必须存在!
字节输入流对象创建发生了哪些事情:
1. 创建了对象
2. 开辟了空间
3. 让字节输入流对象指向路径结尾的文件
4. 如果源文件不存在则报错!
FileOutputStream的输出方法-> 写的方法
FileOutputStream写数据的方法: write
三种写法:
*void write(int b) : 一次写一个字节
void write(byte[] bys) : 一次写一个字节数组
**void write(byte[] b, int offset, int length): 一次一个字节数组的一部分
int offset: 从数组的哪个索引开始写
int length : 写多少个字节
如何换行?? -> 往外写换行符 "\r\n"
如何写字符串?? String类中 : byte[] getBytes() -> 把字符串转换成字节数组
如何追加写?? boolean append : 追加写开关
FileOutputStream(String name, boolean append)
FileOutputStream(File file, boolean append)
FileInputStream的输入方法-> 读的方法
FileInputStream的输入方法 : read
三种读法: 都可以读到文件中的换行符
*int read() : 一次读一个字节
**int read(byte[] bys): 一次读一个字节数组
int read(byte[],int offset, int length): 一次读一个字节数组的一部分
BufferedInputStream/BufferedOutputStream
BufferedInputStream/BufferedOutputStream : 高效字节输入流/高效字节输出流
Buffered: 缓冲区 -> 小推车
构造方法:
BufferedInputStream的构造:
BufferedInputStream(InputStream in)
BufferedOutputStream的构造:
BufferedOutputStream(OutputStream out)
包装流: 本身不具备读写能力,具备读写能力的还是传入的普通流对象
BufferedInputStream/BufferedOutputStream 的读写方式:
BufferedInputStream读的方式:
*int read() : 一次读一个字节
**int read(byte[] bys): 一次读一个字节数组
int read(byte[],int offset, int length): 一次读一个字节数组的一部分
BufferedOutputStream写的方式:
*void write(int b) : 一次写一个字节
void write(byte[] bys) : 一次写一个字节数组
**void write(byte[] b, int offset, int length): 一次一个字节数组的一部分