IO流、File文件操作、文件操作
文件操作
1.File类
File类是用于操作文件和文件夹的一种方式,可以针对文件和文件夹完成增删改查操作。
路径分隔符:
针对windows默认采用\作为分隔符
Linux、unix系统默认采用了/,同时Windows页支持
常用方法
File(String file); //file:文件路径,用于实例化File对象 File(String parent,String childName); //parent:父级目录,childName:子文件或子文件夹名称,用于实例化File对象 File(File parent,String childName); //parent父级目录File对象,childName:子文件夹或子文件名称,用于实例化File对象
1.1文件(文件夹创)操作
调用File对象在File对象存储的路径下创建文件
【注意】:
检查路径合法性
文件是否已经存在
是否拥有操作权限
boolean createFile(); //通过File类对象调用,创建文件 boolean mkdir(); //通过File类对象调用,创建文件夹 mkdirs() //通过File类对象调用,创建多级目录
1.2文件(文件夹)移动重命名操作
同级移动等于重命名
boolean renameTo(File dest); //通过File类对象调用,文件移动,重命名。dist目标路径
1.3文件(文件夹)删除操作
boolean delete();
//通过File类对象调用,删除文件夹或文件,要求文件夹内不能有内容,删除内容不是放入回收站,会直接抹掉
void deleteOnExit();
//通过File类对象调用,在程序退出后删除文件或文件夹,可以用于清理缓存,缓冲文件
1.4判断方法
boolean isFile();
//判断是否是普通文件
boolean isDirectory();
//判断是否是文件夹
boolean exist();
//判断文件或文件夹是否存在
boolean isAbsoulte();
//判断是否使用绝对路径
boolean isHidden();
//判断是否隐藏文件或隐藏文件夹
1.5数据获取操作
String getPath();
//获取File对象存储路径信息
String getParent();
//获取File对象存储路径的父目录
String getName();
//获取File对象存储路径信息的文件或文件夹名
long length();
//通过File对象调用,获取文件大削,如果是文件夹返回值为0L
long lastModified();
//通过File对象调用,获取文件或者文件夹最后修改时间
String getAbsolutrPath();
//获取指定文件或文件夹的绝对路径
File getAbsoluteFile();
//获取指定文件或文件夹的绝对路径对应的File对象
1.6文件列表操作
public static File[] listRoot();
//只有Windows有效,可以获取所有盘符信息
String[] list();
//通过File对象调用,获取对应文件夹中所有子文件或者子文件夹的名称
File[] listFiles();
//通过File对象调用,获取对应文件夹中所有子文件夹或者子文件夹的File对象
1.7文件过滤
/** * 文件名过滤器接口 */ interface FilenameFilter{ /** * 文件名过滤器要求方法中参数指定文件夹File对象,第二个是文件名 * @param dir File 对象,目标进行文件列表操作的文件夹 File 对象 * @param name 指定文件夹下的子文件或者子文件夹名称 */ boolean accept(File dir,String name); }
可以提供给
String[] list(FilenameFilter filter);
File[] listFiles(FilenameFilter filter);
IO流
2.1概述
输入输出是相对于具体参照物而言的
2.2 IO流分类
流向划分
- 输入流
- 输出流
处理数据单位
字节流
用于文件操作,上传或下载,适用于所有类型文件
字节输入流、字节输出流
字符流
只能操作普通可视化文本文件,且收到编码集约束
可分类为:
字符输入流、字节输出流
2.3 文件操作-字节输入流
FileInputStream(String filePath); //根据指定的路径,创建对应的文件的字节码输入流对象 FileInputStream(File file); //根据指定的文件对象,创建对应的字节输入流对象 int read(); //从文件读取一个字节数据返回,返回值类型为int类型,实际有效数据为byte int read(byte[] buffer); //从文件中读取数据到byte类型的缓冲数组,返回值类型为byte类型的缓冲数组中的字节个数 int read(byte[] buffer,int offset,int length); //从文件中读取数据到byte缓冲数组中,要求从offset下标位置开始,到length计数结束,返回值是读取到数组中的字节个数
读到结尾,以上所有方法的返回值都是-1
2.4 文件操作-字节输出流
FileOutputStream(String filePath); //根据指定的文件路径,创建对应文件的文件操作字节输出流对象 FileOutputStream(File file); //根据指定的文件File对象,创建对应当前文件的文件操作字节输出流对象 FileOutputStream(String filePath,boolean append); //根据指定的文件路径,创建对应当前文件的文件操作字节输出流对象,append用于控制当前文件内容写入采取的是追加写还是删除写 FileOutputStream(File file,boolean append); //根据指定文件的File对象,创建对应当前文件的文件操作字节输出流对象,append用于控制当前文件内容写入采取的是追加写还是删除写
- FileOutputStream文件操作字节输出流,对文件的内容写入默认采用删除写。开启追加写需要用append为true来约束
- FileOutputStream有创建文件的能力,不存在则创建,【前提】路径合法,文件夹有操作权限
写入方法:
void write(int b); //写入一个字节数据到文件中 void write(byte[] buffer); //写入一个字节数组数据到文件中 void write(byte[] buffer,int offset,int length); //写入一个字节数组,从指定offset下标开始,写入length个字节数到文件中
2.5字节流拷贝文件思路
字节流可以处理任何文件
需求:复制一个MP4文件到另外一个目录下
流程:
- 明确原文件路径
- 明确目标文件路径
- 创建FileInputStream文件操作字节输入流对象,将文件内容读取到内存中
- 创建FileOutputStream文件操作字节输出流对象,将内存中的文件内容输出到目标路径下,如果对应文件不存在,自动创建。
- 关闭资源
2.6文件操作字符输入流
FileReader(String filepath);
//根据指定的文件路径,创建对应文件的文件操作字符输入流对象
FileReader(File file);
//根据指定的File对象,创建对应的文件操作字符输入流对象
读取操作方法
int read();
int read(char[] buffer);
int read(char[] buffer,int offset,int length);
2.7文件操作字符输出流
FileWriter(String filePath); //根据指定文件的File对象,创建对应文件的文件操作字符输出流对象 FileWriter(File file); //根据指定文件的File对象,创建对应文件的文件操作字符输出流对象 FileWriter(String filepath,boolean append); //根据指定的文件路径,创建对应的文件操作字符输出流对象,append用于控制当前文件采取的是追加写还是删除写 FileWriter(File file,boolean append); //根据指定文件File对象,创建对应文件的文件操作字符输出流对象
- FileWriter字符输出流默认采用删除写
- FileWriter有文件创建的能力,【前提】路径合法,文件夹有操作权限
写入操作方法
void write(int ch); void write(char[] buffer); void write(char[] buffer,int offset,int length); void write(Stirng str); void write(String str,int offset,int length);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)