java进阶知识--File类
1.1 概述
1 2 3 4 5 6 7 | // 文件路径名 String pathname = "D:\\aaa.txt" ; File file1 = new File(pathname); // 文件路径名 String pathname2 = "D:\\aaa\\bbb.txt" ; File file2 = new File(pathname2); |
-
public File(String parent, String child)
:从父路径名字符串和子路径名字符串创建新的 File实例。
1 2 3 4 | // 通过父路径和子路径字符串 String parent = "d:\\aaa" ; String child = "bbb.txt" ; File file3 = new File(parent, child); |
-
public File(File parent, String child)
:从父抽象路径名和子路径名字符串
1 2 3 4 | // 通过父级File对象和子路径字符串 File parentDir = new File( "d:\\aaa" ); String child = "bbb.txt" ; File file4 = new File(parentDir, child); |
一个File对象代表硬盘中实际存在的一个文件或者目录。
1.3 常用方法
1.3.1 获取功能的方法
-
-
public String getPath()
:将此File转换为路径名字符串。 (构造路径) -
public String getName()
:返回由此File表示的文件或目录的名称。 -
public long length()
-
public long lastModified()
-
-
public boolean isDirectory()
:此File表示的是否为目录。 -
public boolean isFile()
1.3.3 创建、删除功能的方法
-
-
public boolean delete()
:删除由此File表示的文件或目录。
delete方法,如果此File表示目录,则目录必须为空才能删除。
-
public void deleteOnExit()
:在程序退出时,删除指定文件。 -
public boolean mkdir()
:创建由此File表示的目录。 -
public boolean mkdirs()
1.4 目录的遍历
-
public String[] list()
:返回一个String数组,表示该File目录中的所有(一级)子文件或目录的名称。
-
public File[] listFiles()
:返回一个File数组,表示该File目录中的所有(一级)子文件或目录的对象。
1.5 File中的四个关键静态方法
- static String pathSeparator(); //与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
- static Char pathSeparatorChar(); //与系统有关的路径分隔符。
- static String separator(); //与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
- static Char separatorChar(); //与系统有关的默认名称分隔符。
小贴士:
路径分隔符 windows:分号; linux:冒号:
名称分隔符 windows:反斜杠 \ linux:正斜杠 /
1.6 使用文件过滤器实现文件搜索
1.6.1 文件过滤器FileFilter
1.6.2 案例分析
-
-
accept
方法,参数为File,表示当前File下所有的子文件和子目录。保留住则返回true,过滤掉则返回false。保留规则:a. 要么是.java文件。
b. 要么是目录,用于继续遍历。
-
通过过滤器的作用,
listFiles(FileFilter)
-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | public class DiGuiQueryDemo { public static void main(String[] args) { File dir = new File( "D:\\job" ); printDir(dir); } public static void printDir(File dir) { // 匿名内部类方式,创建过滤器子类对象 /*File[] files = dir.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".java")||pathname.isDirectory(); } });*/ // lambda的书写方式,创建过滤器子类对象 File[] files = dir.listFiles(f -> { return f.getName().endsWith( ".java" ) || f.isDirectory(); }); // 循环打印 for (File file : files) { if (file.isFile()) { System. out .println( "文件名:" + file.getAbsolutePath()); // 启动.exe文件 /*try { Runtime runtime = Runtime.getRuntime(); runtime.exec(file.getAbsolutePath()); } catch (IOException e) { e.printStackTrace(); }*/ } else { printDir(file); } } } } |
扩展:
FilenameFilter接口也是一个文件过滤器接口,实现此接口的类实例可用于过滤文件名。
抽象方法:
boolean accept(File dir, String name)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)