IO流之File类
文件
-
文件就是保存数据的地方
-
文件在程序中是以流的形式操作,流是一组有序的数据序列,将数据从一个地方带到另一个地方。
-
在变量、数组、对象和集合中存储的数据是暂时存在的,一旦程序结束它们就会丢失。为了能够永久地保存程序创建的数据,需要将其保存到磁盘文件中,这样就可以在其他程序中使用它们。Java的IO技术可以将数据保存到文本文件和二进制文件中,以达到永久保存数据的要求。
-
实现comparable:可以比较;实现serializable:
-
IO流可以帮助我们将数据读取以及写入文件,那么当我们要操作系统的文件和文件夹的时候就需要java.io包中的File类,使用File类进行文件的定位,在通过io流操作数据
-
在Java中,File类是java.io包中唯一代表磁盘文件本身的对象,即希望在程序中操作文件和目录,都可用通过File类完成。
-
路径分为绝对路径和相对路径
-
绝对路径:以盘符(根目录)为开头的路径
-
相对路径:相对于它所在的项目路径;eg:src/com/zhiyou/io/File.java
-
-
File类定义了一些方法来操作文件,如新建、删除、重命名文件和目录。
-
构造方法:创建文件(需抛出异常)需调用createNewFile()方法;
-
new File(String pathname):根据路径构建一个File对象;如果path是实际存在的路径,则该File对象表示的是目录;如果path是文件名,则该File对象表示的是文件;
-
new File(String path,String child):根据父目录+子路径构建;path是路径名,child是文件名;
-
new File(File parent,String child):根据父目录文件+子路径构建;parent是路径对象,child是文件名;
-
//创建文件
-
删除文件
-
删除文件需要调用delete()方法;
-
删除文件需要先调用exists()方法判断文件是否存在;存在就删除,exists()返回true,删除成功,false,删除失败
-
文件如果存在,原文件内容会丢失
-
public void cr() throws IOException{//抛出异常
//创建、删除文件
File file = new File("e:/test.txt");
if (file.exists()){
file.delete();
}
file.createNewFile();
} }
-
常用方法:
String path = "e:/";
File f = new File(path ,"a.txt");
System.out.println("a.txt文件是否存在" + f.exists());//文件是否存在
System.out.println("a.txt文件长度" + f.length());//长度
System.out.println("a.txt" + (f.isFile()?"是文件":"不是文件"));//判断是否是文件
System.out.println("a.txt" + (f.isDirectory()?"是目录":"不是目录"));//判断是否是目录
System.out.println("a.txt" + (f.canRead()?"可读":"不可读"));//判断是否可读
System.out.println("a.txt" + (f.canWrite()?"可写":"不可写"));//判断是否可写
System.out.println("a.txt" + (f.isHidden()?"是隐藏文件":"不是隐藏文件"));//是否隐藏文件
System.out.println("a.txt最后修改日期" + new Date(f.lastModified()));//最后修改日期
System.out.println("a.txt文件名称" + f.getName());//获取文件名称
System.out.println("a.txt父目录" + f.getParent());//获取父目录
System.out.println("a.txt文件路径" + f.getPath());//获取文件路径
System.out.println("a.txt绝对路径" + f.getAbsolutePath());
-
常用常量
-
pathseparator:表示分割连续 多个路径字符串的分隔符;在Windows中指
;
-
separator:用来分割同一个路径字符串中的目录,Windows中指
/
,java中还可以用\\
表示
编写路径时一定用上述方法表示分隔符,以确保java程序的可移植性;因为不同系统的分隔符表示或许不同
-
-
创建、删除目录(不需抛出异常)
-
删除目录需要调用delete()方法;创建目录调用madir()(创建一级目录)方法,madirs()(创建多级目录)方法;
-
无论创建还是删除目录通常都先调用exists()方法判断目录是否存在;不存在则创建,存在提示存在
-
如果目录内存在文件,则不会删除
-
String path = "e:/xxt";//创建目录位置
File file = new File(path);//创建File对象
if (file.exists()){//判断
System.out.println("目录存在" );
}else {
if(file.mkdir()){//创建一级目录,并返回布尔值
System.out.println("创建成功" );
}else {System.out.println("创建失败" );
}
}
String path = "e:/z_practice";//确定目录位置
File file = new File(path);//创建File对象
if (file.exists()){//判断
System.out.println("目录存在" );
System.out.println(file.delete());
}else {
System.out.println("目录不存在" );
}
-
遍历目录
-
通过遍历目录可以在指定的目录中查找文件,或者显示所有的文件列表,File类的list()方法提供了遍历目录功能;该方法有两种重载形式:
-
String[] list():该方法表示返回由File对象表示目录中所有文件和文件夹名称组成的字符串数组,如果调用该方法的不是目录,返回null;
-
String [] list (FilenameFilter filter):作用同list(),不同的是返回的数组仅包含符合filter过滤器的文件和文件夹,如果filter为null,则接收所有名称;
-
//list()方法
File file = new File("d:/");//创建变量
System.out.println("文件名称\t\t文明类型\t\t文件大小");
System.out.println("=========================");
String fileList[] = file.list();
for (int i = 0; i < fileList.length; i++) {//list()返回数组,需要获取File对象,再获得属性
System.out.print(fileList[i] + "\t\t");
System.out.print(new File("d:\"",fileList[i]).isFile()?"文件"+ "\t\t":"文件夹" + "\t\t");
System.out.print(new File("d:\"",fileList[i]).length() + "字节" );
}
//list(FilenameFilter filter)方法
//创建listFilter过滤器,类型为FilenameFilter;调用list()传入过滤器即可
class listFilter implements FilenameFilter{
//实现FilenameFilter 接口
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本