File全面详细讲解(含笔记和练习)
File类1、File类概述与对象的创建File表示系统中的文件或者文件夹的路径路径分两种相对路径不带盘符的默认到当前的项目下去找和绝对路径带盘符的FileFile对象就表示一个路径可以是文件的路径、也可以是文件夹的路径这个路径可以是存在的也允许是不存在的File类常见的构造方法创建对象Public File(String pathname) 根据文件路径创建文件对象Public File(String parent, String child)根据父路径名字符串和子路径名字符串创建文件对象public File(File parent, String child) 根据父路径对应文件对象和子路径名字符串创建文件对象例“C:\Users\Desktop\a.txt”;父路径父级路径C:\Users\Desktop子路径子级路径a.txtimport java.io.File; public class Main { public static void main(String[] args) { String str E:\\java.File\\Text.opp\\Demo.txt; File f1 new File(str); System.out.println(f1); String parent E:\\java.File\\Text.opp; String child Demo.txt; //拼接父路径字符串和子路径字符串在它们之间加上转义字符\ File f2 new File(parent,child); //上面的构造方法相当于 File f3 new File(parent \\ child); System.out.println(f2); //3.把一个File表示的路径和String表示路径进行拼接 File parent2 new File(E:\\java.File\\Text.opp); String child2 Demo.txt; File f4 new File(parent2,child2); System.out.println(f4); } }2、File常见的成员方法1判断、获取判断Public boolean isDirectory() 判断此路径名表示的File是否为文件夹Public boolean isFile() 判断此路径名表示的File是否为文件Public boolean exists() 判断此路径表示的File是否存在获取Public long length() 返回文件的大小字节数量)Public String getAbsolutePath() 返回文件的绝对路径Public String getPath() 返回定义文件时使用的路径Public String getName() 返回文件的名称带后缀Public long lastModified() 返回文件的最后修改时间时间毫秒值)import java.io.File; public class FileDemo2 { public static void main(String[] args) { //length()获取文件占字节大小。 File f1 new File(E:\\java.File\\Text.opp\\aaa\\bbb\\新建 Microsoft Word 文档.docx);// long len f1.length();//这里文件的字节大小13640 System.out.println(len); File f2 new File(E:\\java.File\\Text.opp\\aaa\\bbb); long len2 f2.length(); //这里文件夹的字节大小0因为细节length()这个方法只能获取文件的大小单位是字节 // 无法获取文件夹的大小如果要获取文件夹的大小我们需要把文件夹中所有文件大小累加起来 System.out.println(len2); System.out.println(-----------------------------------------------); //getAbsolutePath() 获取绝对路径 File f3 new File(E:\\java.File\\Text.opp\\aaa\\bbb\\新建 Microsoft Word 文档.docx); String path1 f3.getAbsolutePath(); System.out.println(path1); File f4 new File(bbb\\新建 Microsoft Word 文档.docx); String path2 f4.getAbsolutePath(); System.out.println(path2); System.out.println(-----------------------------------------------); //getPath 返回定义文件时使用的路径 File f5 new File(E:\\java.File\\Text.opp\\aaa); String path3 f3.getAbsolutePath(); System.out.println(-----------------------------------------------); System.out.println(path3); //getName 获取名字 //细:1: //Demo.txt Demo是文件名 txt是后缀名、扩展名 //细节2: //文件夹返回的就是文件夹的名字 File f7 new File(E:\\java.File\\Text.opp\\Demo.txt); String name1 f7.getName(); System.out.println(name1); File f8 new File(E:\\java.File\\Text.opp); String name2 f8.getName(); System.out.println(name2); System.out.println(-----------------------------------------------); //lastModified 返回文件的最后修改时间时间毫秒值 File f9 new File(E:\\java.File\\Text.opp\\aaa\\bbb\\新建 Microsoft Word 文档.docx); long time f9.lastModified(); System.out.println(time); } }2创建、删除Public boolean createNewFile() 创建一个新的空的文件Public boolean mkdir() 创建单级文件夹Public boolean mkdirs() 创建多级文件夹Public boolean delete()删除文件、空文件夹重点delete方法默认只能删除文件和空文件夹delete方法直接删除不走回收站import java.io.File; import java.io.IOException; public class FileDemo3 { public static void main(String[] args) throws IOException { //1、createNewFile 创建一个新的空的文件 //细节1如果当前路径表示的文件是不存在的则创建成功方法返回true // 如果当前路径表示的文件是存在的则创建失败方法返回false //细节2如果父级路径是不存在的那么方法会有异常IOException //细节3createNewFile方法创建的一定是文件如果路径不包含后缀名则创建的就是没有后缀的文件 File f1 new File(E:\\java.File\\Come\\Demo.txt); boolean b f1.createNewFile(); System.out.println(b); System.out.println(); //2、mkdir make Directory. 文件夹目录创建一个文件夹 //细节1windows当中路径是唯一的如果当前路径已经存在则创建失败反返回false //细节2mkdir方法只能创建单级文件夹无法创建多级文件夹 File f2 new File(E:\\java.File\\Come); boolean b2 f2.mkdir(); System.out.println(b2); File f3 new File(E:\\java.File\\wang\\zhuo); System.out.println(f3.mkdir()); System.out.println(); //3、mkdir 创建多级文件夹 //细节既可以创建单级的又可以创建多级文件夹 File f4 new File(E:\\java.File\\wang\\zhuo); boolean b3 f4.mkdirs(); System.out.println(b3); System.out.println(); //4、delete 删除文件。文件夹 //细节 /* 如果删除的是文件则直接删除不走回收站 如果删除的是空文件夹则直接删除不走回收站 如果删除的是有内容的文件夹则删除失败 */ File f5 new File(E:\\java.File\\Come\\Demo.txt); boolean b5 f5.delete(); System.out.println(b5); File f6 new File(E:\\java.File\\Come); boolean b6 f6.delete(); System.out.println(b6); } }3获取并遍历public File[] listFiles() 获取当前该路径下所有内容获取文件夹里面的所有内容并把返回数组当调用者File表示的路径不存在时返回null当调用者File表示的路径是文件时返回null当调用者File表示的路径是一个空文件夹时返回一个长度为0的数组当调用者File表示的路径是一个有内容的文件夹时将里面所有文件和文件夹的路径放在File数组中返回当调用者File表示的路径是一个有隐藏文件的文件夹时将里面所有文件和文件夹的路径放在File数组中返回包含隐藏文件当调用者File表示的路是需要权限才能访问的文件夹时返回nullimport java.io.File; public class FileDemo4 { public static void main(String[] args) { File f new File(E:\\java.File\\bbb); //listFiles方法 作用获取当前路径下所有内容并放到数组中。 File[] files f.listFiles(); for (File file : files) { //file依次表示aaa文件夹里面的每一个文件或者文件夹 System.out.println(file); } } } 输出 E:\java.File\bbb\ddd E:\java.File\bbb\屏幕截图 2026-04-14 215600.png E:\java.File\bbb\屏幕截图 2026-04-14 215707.png E:\java.File\bbb\新建 Microsoft Word 文档.docxFile的其他常见成员方法获取并遍历Public static File[] listRoots()列出可用的文件系统根即电脑上有的盘符例C:\, D:\Public String[] list()获取当前该路径下所有内容仅仅只能获取文件或文件夹的名字Public String[] list(FilenameFilter filter)利用文件名过滤器获取当前该路径下所有内容Public File[] listFiles()获取当前该路径下所有内容Public File[] listFiles(FileFilter filter)利用文件名过滤器获取当前该路径下所有内容Public File[] listFiles(FilenameFilter filter)利用文件名过滤器获取当前该路径下所有内容import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; public class FileDemo5 { public static void main(String[] args) { //1、listRoots 获取系统中所有的盘符 File[] arr File.listRoots(); System.out.println(Arrays.toString(arr)); System.out.println(); //2、list() 获取当前该路径下所有内容仅仅只能获取文件夹或文件名字); File f1 new File(E:\\java.File\\bbb); String[] arr2 f1.list(); for(String s: arr2){ System.out.println(s); } System.out.println(); //3、list(FilenameFilter filter) 利用文件名过滤器获取当前该路径下所有内容 //需求我现在要获取E:\java.File\bbb文件夹里面所有的png文件 File f2 new File(E:\\java.File\\bbb); //accept方法的形参依次表示bbb文件夹里面每一个文件或者文件夹的路径 //参数一父级路径 //参数二子级路径 //返回值返回值为true就表示当前路径保留 // 返回值为false就表示当前路径舍弃不要 String[] arr3 f2.list(new FilenameFilter() { Override public boolean accept(File dir, String name) { File src new File(dir,name); if(src.isFile() name.endsWith(.png)) { return true; }else { return false; } } }); System.out.println(Arrays.toString(arr3)); } } import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; import java.util.Arrays; public class FileDemo6 { public static void main(String[] args) { //Public File[] listFiles(FileFilter filter) 利用文件名过滤器获取当前该路径下所有内容 File f new File(E:\\java.File\\bbb); File[] arr f.listFiles(new FileFilter() { Override public boolean accept(File file) { return file.isFile() file.getName().endsWith(.png); } }); //Public File[] listFiles(FilenameFilter filter)利用文件名过滤器获取当前该路径下所有内容 f.listFiles(new FilenameFilter() { Override public boolean accept(File dir, String name) { File src new File(dir, name); return src.isFile() src.getName().endsWith(.png); } }); System.out.println(Arrays.toString(arr)); } }3、File综合练习一、练习目标掌握File类文件 / 文件夹创建、删除、重命名、判断类型、遍历目录区分文件与目录操作 API递归遍历文件夹、过滤指定后缀文件文件基础信息读取大小、修改时间、是否可读 / 可写import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; public class FilePractice { public static void main(String[] args) { // 1. 定义文件/目录路径 File dir new File(./testDir); // 文件夹 File file new File(dir, demo.txt); // 文件夹下的文件 // 2. 创建文件夹 createDir(dir); // 3. 创建文件 createFile(file); // 4. 打印文件基础信息 printFileInfo(file); // 5. 重命名文件 renameFile(file, new File(dir, newDemo.txt)); // 6. 遍历文件夹普通遍历 System.out.println( 普通遍历目录 ); listDir(dir); // 7. 递归遍历所有子目录过滤 .txt 文件 System.out.println(\n 递归遍历所有txt文件 ); listTxtRecursion(dir); // 8. 删除文件、删除空文件夹 deleteFile(new File(dir, newDemo.txt)); deleteEmptyDir(dir); } // 1. 创建单层文件夹 public static void createDir(File dir) { if (!dir.exists()) { boolean res dir.mkdir(); // mkdirs() 创建多级目录 System.out.println(文件夹创建结果 res); } else { System.out.println(文件夹已存在); } } // 2. 创建文件 public static void createFile(File file) { try { if (!file.exists()) { boolean res file.createNewFile(); System.out.println(文件创建结果 res); } else { System.out.println(文件已存在); } } catch (Exception e) { e.printStackTrace(); } } // 3. 打印文件详细信息 public static void printFileInfo(File file) { System.out.println(\n 文件信息 ); System.out.println(文件名 file.getName()); System.out.println(绝对路径 file.getAbsolutePath()); System.out.println(父目录 file.getParent()); System.out.println(是否是文件 file.isFile()); System.out.println(是否是文件夹 file.isDirectory()); System.out.println(文件大小(字节) file.length()); System.out.println(是否可读 file.canRead()); System.out.println(是否可写 file.canWrite()); long time file.lastModified(); String format new SimpleDateFormat(yyyy-MM-dd HH:mm:ss).format(new Date(time)); System.out.println(最后修改时间 format); } // 4. 文件重命名 public static void renameFile(File oldFile, File newFile) { if (oldFile.exists()) { boolean res oldFile.renameTo(newFile); System.out.println(\n文件重命名结果 res); } } // 5. 单层遍历文件夹 public static void listDir(File dir) { if (dir.exists() dir.isDirectory()) { File[] files dir.listFiles(); for (File f : files) { System.out.println(f.getName() (f.isDirectory() ? [文件夹] : [文件])); } } } // 6. 递归遍历只输出 .txt 文件 public static void listTxtRecursion(File dir) { if (!dir.exists() || !dir.isDirectory()) return; File[] files dir.listFiles(); for (File f : files) { if (f.isDirectory()) { // 递归进入子文件夹 listTxtRecursion(f); } else { // 判断后缀 String name f.getName(); if (name.endsWith(.txt)) { System.out.println(f.getAbsolutePath()); } } } } // 7. 删除文件 public static void deleteFile(File file) { if (file.exists() file.isFile()) { boolean res file.delete(); System.out.println(\n删除文件结果 res); } } // 8. 删除空文件夹只能删空目录 public static void deleteEmptyDir(File dir) { if (dir.exists() dir.isDirectory()) { File[] files dir.listFiles(); if (files null || files.length 0) { boolean res dir.delete(); System.out.println(删除空文件夹结果 res); } else { System.out.println(文件夹非空无法直接删除); } } } }

相关新闻

嵌入式GUI开发实战:emWin内存管理与显示驱动深度优化指南

嵌入式GUI开发实战:emWin内存管理与显示驱动深度优化指南

1. 项目概述与核心挑战 在嵌入式系统里做图形界面,emWin算是个绕不开的老伙计了。它功能全、效率高,但真要用好,尤其是在资源捉襟见肘的MCU上,光会调用API画几个按钮是远远不够的。我见过不少项目,界面卡顿、内存泄漏、…

2026/6/21 9:31:51阅读更多 →
PIC17CXXX外部存储器接口设计:16位逻辑与闪存简化系统方案

PIC17CXXX外部存储器接口设计:16位逻辑与闪存简化系统方案

1. 项目概述:为什么PIC17CXXX需要外部存储器接口?在嵌入式开发的早期,尤其是8位单片机大行其道的年代,PIC17CXXX系列算是一个“异类”。它虽然被归类为8位微控制器,但其指令集和数据总线却具备了处理16位数据的能力&am…

2026/6/21 9:31:51阅读更多 →
emWin列表控件实战:LISTBOX与LISTVIEW核心API详解与应用

emWin列表控件实战:LISTBOX与LISTVIEW核心API详解与应用

1. 项目概述:深入理解emWin的列表控件 在嵌入式GUI开发这条路上,我踩过的坑不少,尤其是在处理数据展示和用户交互时,列表控件绝对是绕不开的核心组件。无论是设备参数配置、历史记录查询,还是简单的菜单选择&#xff0…

2026/6/21 9:31:51阅读更多 →
显卡驱动彻底卸载终极指南:DDU工具快速解决方案

显卡驱动彻底卸载终极指南:DDU工具快速解决方案

显卡驱动彻底卸载终极指南:DDU工具快速解决方案 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-uninstaller 显…

2026/6/21 11:07:00阅读更多 →
HC05E6EM仿真器配置与调试指南:MMDS05与HC05EVS系统实战

HC05E6EM仿真器配置与调试指南:MMDS05与HC05EVS系统实战

1. 项目概述与核心价值 如果你正在捣鼓基于Motorola(现NXP)经典MC68HC05E6或MC68HC705E6系列微控制器的嵌入式项目,那么手头有一块HC05E6EM仿真器模块,绝对能让你的开发调试效率提升好几个档次。这玩意儿不是什么玄学,…

2026/6/21 11:07:00阅读更多 →
TRK-USB-MPC5604B开发板全解析:从入门到自定义硬件设计

TRK-USB-MPC5604B开发板全解析:从入门到自定义硬件设计

1. 项目概述与核心价值 拿到一块新的嵌入式开发板,第一件事是什么?是急着插电跑例程,还是先翻看那本厚厚的用户手册?我的习惯是后者,尤其是对于像TRK-USB-MPC5604B这样集成了特定调试接口的开发板。这块板子虽然发布于…

2026/6/21 11:07:00阅读更多 →
Windows原生部署LLaMA Factory:不靠WSL的本地大模型微调实战

Windows原生部署LLaMA Factory:不靠WSL的本地大模型微调实战

1. 项目概述:在Windows上跑通LLaMA Factory,不是“装个软件”而是重建本地AI开发流 你是不是也刷到过这样的标题:“5分钟在Windows上部署大模型”、“手把手教你用LLaMA Factory训自己的模型”?点进去一看,全是Linux命…

2026/6/21 11:07:00阅读更多 →
ping的返回的ttl解读的庖丁解牛

ping的返回的ttl解读的庖丁解牛

它的本质是:**TTL (Time To Live) 不是“时间”,而是 “最大路由跳数计数器” (Max Hop Counter)。 核心矛盾:IP 协议是无连接的,数据包可能在网络中无限循环(路由环路)。为了防止这种情况,每个…

2026/6/21 11:07:00阅读更多 →
LoadRunner性能测试实战:从脚本开发到瓶颈定位的完整指南

LoadRunner性能测试实战:从脚本开发到瓶颈定位的完整指南

1. 项目概述:从“跑起来”到“跑得好”的性能工程实践在软件交付的冲刺阶段,最让测试和开发团队头疼的,往往不是功能缺陷,而是那些“平时好好的,一上线就崩”的性能问题。我见过太多项目,功能测试全绿&…

2026/6/21 11:01:59阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/21 0:00:40阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/21 0:00:40阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/21 0:00:40阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/21 0:00:40阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/21 0:00:40阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/21 0:00:40阅读更多 →