一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情。
Java中的文件操作类File的常用方法
在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象,也就是说,如果希望在程序中操作文件和目录,则都可以通过 File 类来完成。File 类定义了一些方法来操作文件,如新建、删除、重命名文件和目录等。
File 类不能访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流。
看几个案例:
阅读下列程序,掌握File类文件及文件夹的创建方法。
创建功能:
public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会把父文件夹创建出来
注意:
到底要创建文件还是文件夹,方法不要调错了。
需求:
在e盘目录下创建一个文件夹demo
File file1=new File("e:\\demo");
System.out.println("mkdir:"+file1.mkdir());
需求:
在e盘目录demo下创建一个文件a.txt
File file2=new File("e:\\demo\\a.txt");
System.out.println("createNewFile:"+file2.createNewFile());
需求:
在e盘目录test下创建一个文件b.txt
Exception in thread "main" java.io.IOException: 系统找不到指定的路径。
注意:
要想在某个目录下创建内容,该目录首先必须存在。
File file3=new File("e:\\test\\b.txt");
System.out.println("createNewFile:"+file3.createNewFile());
需求:
在e盘目录test下创建aaa目录
File file4=new File("e:\\test\\aaa");
System.out.println("mkdir:"+file4.mkdir());
阅读下列程序,掌握File类文件及文件夹的删除方法。
删除功能:public boolean delete()
注意:
A:如果创建文件或者文件夹没有写盘符路径,那么,默认在项目路径下。
B:Java中的删除不走回收站。
C:要删除一个文件夹,该文件夹内不能包含文件或者子文件夹
D:没有写盘符路径,则称为相对路径,文件创建在项目路径下
File file6 = new File("aaa\\bbb");
File file7 = new File("aaa");
System.out.println("delete:" + file6.delete());
System.out.println("delete:" + file7.delete());
File类的判断功能和获取功能
判断功能:
public boolean isDirectory():判断是否是目录
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏
获取功能:
public String getAbsolutePath():获取绝对路径
public String getPath():获取相对路径
public String getName():获取名称
public long length():获取长度。字节数
public long lastModified():获取最后一次的修改时间,毫秒值
掌握File类的高级获取功能。
高级获取功能:
public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
编写程序,过滤出E盘目录下(不包含子目录)所有后缀名为.jpg的文件并输出到控制台。
判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
要想实现这个效果,就必须学习一个接口:文件名称过滤器
public String[] list(FilenameFilter filter)
public File[] listFiles(FilenameFilter filter)
File[] strArray = file.listFiles((dir,name)->new File(dir, name).isFile()&&name.endsWith(".jpg"));
for (String s : strArray) {
System.out.println(s);
}
Arrays.stream(strArray).forEach(f -> System.out.println(f))
编写程序,删除内容非空且有多级子目录的目录
思路分析:
A:封装目录
B:获取该目录下的所有文件或者文件夹的File数组
C:遍历该File数组,得到每一个File对象
D:判断该File对象是否是文件夹
是:回到B
否:就删除
public class FileDeleteDemo {
public static void main(String[] args) {
//封装目录
File file = new File("demo");
// 递归方式实现
deleteFolder(file);
}
//递归方法
private static void deleteFolder(File srcFolder) {
// 获取该目录下的所有文件或者文件夹的File数组
File[] fileArray = srcFolder.listFiles();
//遍历该File数组,得到每一个File对象
for (File file : fileArray) {
// 判断该File对象是否是文件夹
if (file.isDirectory()) {
deleteFolder(file); // 递归调用
}
System.out.println(file.getName() + "----" + file.delete());
}
//删除本级空文件夹
System.out.println(srcFolder.getName() + "----" + srcFolder.delete());
}
}