当前位置: 首页 > news >正文

Java的file

File

  • File 对象就表示一个路径,可以是文件的路径,也可以是文件夹的路径
  • 这个路径可以是存在的,也允许是不存在的
方法名称 说明
public File(String pathname) 根据文件路径创建文件对象
public File(String parent, String child) 根据父路径名字符串和子路径名字符串创建文件对象
public File(File parent, String child) 根据父路径对应文件对象和子路径名字符串创建文件对象
package com.faxont.file;import java.io.File;public class FileDemo1 {public static void main(String[] args) {/*public File(String pathname)                    根据文件路径创建文件对象public File(String parent, String child)        根据父路径名字符串和子路径名字符串创建文件对象public File(File parent, String child)          根据父路径对应文件对象和子路径名字符串创建文件对象*/// 1. 根据字符串表示的路径,变成 File 对象String filePath = "D:\\java\\workspace\\a.txt";File file1 = new File(filePath);System.out.println(file1);// D:\java\workspace\a.txt// 2. 根据父路径和子路径,变成 File 对象// 父级路径:D:\java\workspace// 子级路径:a.txtString fileParent = "D:\\java\\workspace";String fileChild = "a.txt";File file2 = new File(fileParent, fileChild);System.out.println(file2);// D:\java\workspace\a.txt// 3. 根据父路径对应的 File 对象和子路径,变成 File 对象File fileParent2 = new File("D:\\java\\workspace");File file3 = new File(fileParent2, fileChild);System.out.println(file3);// D:\java\workspace\a.txt}
}

File 的常见成员方法

判断、获取

方法名称 说明
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() 返回文件的最后修改时间(时间毫秒值)
package com.faxont.file;import java.io.File;public class FileDemo2 {public static void main(String[] args) {/*public boolean isDirectory()        判断此路径名表示的 File 是否为文件夹public boolean isFile()             判断此路径名表示的 File 是否为文件public boolean exists()             判断此路径名表示的 File 是否存在*/// 1. 对一个文件夹的路径进行判断File f1 = new File("D:\\Java\\workspace");System.out.println(f1.isDirectory());System.out.println(f1.isFile());System.out.println(f1.exists());System.out.println("-----------------------------");// 2. 对一个文件的路径进行判断File f2 = new File("D:\\Java\\hadoop\\test.txt");System.out.println(f2.isDirectory());System.out.println(f2.isFile());System.out.println(f2.exists());System.out.println("-----------------------------");// 3. 对一个不存在的路径进行判断File f3 = new File("D:\\Java\\test.txt");System.out.println(f3.isDirectory());System.out.println(f3.isFile());System.out.println(f3.exists());}
}
package com.faxont.file;import java.io.File;
import java.text.SimpleDateFormat;public class FileDemo3 {public static void main(String[] args) {/*public long length()                    返回文件的大小(字节数量)public String getAbsolutePath()         返回文件的绝对路径public String getPath()                 返回定义文件时使用的路径public String getName()                 返回文件的名称,带后缀public long lastModified()              返回文件的最后修改时间(时间毫秒值)*/// 1. length 返回文件的大小(字节数量)// 细节1:这个方法只能获取文件的大小,单位是字节// 细节2:这个方法无法获取文件夹的大小// 如果我们要获取一个文件夹的大小,需要把这个文件夹里面所有的文件大小累加在一起File f1 = new File("D:\\java\\hadoop\\test.txt");System.out.println(f1.length());File f2 = new File("D:\\java\\hadoop");System.out.println(f2.length());System.out.println("-----------------------------");// 2. getAbsolutePath() 返回文件的绝对路径File f3 = new File("D:\\java\\hadoop\\test.txt");System.out.println(f3.getAbsolutePath());File f4 = new File("file\\a.txt");System.out.println(f4.getAbsolutePath());System.out.println("-----------------------------");// 3. getPath() 返回定义文件时使用过的路径File f5 = new File("D:\\java\\hadoop\\test.txt");System.out.println(f5.getPath());File f6 = new File("file\\a.txt");System.out.println(f6.getPath());System.out.println("-----------------------------");// 4. getName() 获取文件的名称,带后缀// 细节1:// a.txt    a 文件名   txt 后缀名、拓展名// 细节2:// 如果是文件夹,那么getName() 返回的就是文件夹的名称File f7 = new File("D:\\java\\hadoop\\test.txt");System.out.println(f7.getName());File f8 = new File("D:\\java\\hadoop");System.out.println(f8.getName());System.out.println("-----------------------------");// 5. lastModified() 返回文件的最后修改时间(时间毫秒值)File f9 = new File("D:\\java\\hadoop\\test.txt");System.out.println(f9.lastModified());File f10 = new File("file\\a.txt");System.out.println(f10.lastModified());// 将毫秒值转换为 日期 yyyy-MM-dd HH:mm:ssSimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(sdf.format(f9.lastModified()));System.out.println(sdf.format(f10.lastModified()));}
}

创建、删除

方法名称 说明
public boolean createNewFile() 创建一个新的空文件
public boolean mkdir() 创建单级文件夹
public boolean mkdirs() 创建多级文件夹
public boolean delete() 删除文件、空文件夹

注意:delete 方法默认只能删除文件和空文件夹,delete 方法直接删除不走回收站

package com.faxont.file;import java.io.File;
import java.io.IOException;public class FileDemo4 {public static void main(String[] args) throws IOException {/*public boolean createNewFile()      创建一个新的空文件public boolean mkdir()              创建单级文件夹public boolean mkdirs()             创建多级文件夹public boolean delete()             删除文件、空文件夹*/// 1. 创建一个文件// 细节1:如果当前路径表示的文件是不存在的,则创建成功,方法返回 true//          如果当前路径表示的文件是存在的,则创建失败,方法返回 false// 细节2:如果父级路径是不存在的,那么方法会有异常// 细节3:createNewFile() 方法创建的一定是文件,如果路径中不包含后缀名,则返回一个没有后缀的文件File f1 = new File("D:\\Java\\workspace\\a.txt");System.out.println(f1.createNewFile());// 2. 创建单级文件夹// 细节1:Windows 当中路径是唯一的,如果当前路径已经存在,则创建失败,返回 false(例如,当前路径下有一个叫 test 的无后缀文件,我将无法再创建一个叫 test 的文件夹)// 细节2:mkdir 方法只能创建单级文件夹,无法创建多级文件夹File f2 = new File("D:\\Java\\workspace\\test");System.out.println(f2.mkdir());// 3. 创建多级文件夹// 细节:mkdirs 既可以创建单级文件夹,也可以创建多级文件夹File f3 = new File("D:\\Java\\workspace\\test\\a\\b\\c");System.out.println(f3.mkdirs());}
}
package com.faxont.file;import java.io.File;public class FileDemo5 {public static void main(String[] args) {/*public boolean delete()             删除文件、空文件夹细节:如果删除的是文件,则直接删除,不走回收站如果删除的是空文件夹,则直接删除,不走回收站如果删除的是非空文件夹,则不能删除,返回 false*/// 1. 创建 File 对象File f1 = new File("D:\\java\\workspace\\a.txt");// 2. 删除boolean b = f1.delete();System.out.println(b);}
}

获取并遍历

方法名称 说明
public File[] listFiles() 获取当前该路径下所有内容

注意

  • 当调用者 File 表示的路径不存在时,返回 null
  • 当调用者 File 表示的路径是文件时,返回 null
  • 当调用者 File 表示的路径是一个空文件夹时,返回一个长度为0的数组
  • 当调用者 File 表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在 File 数组中返回
  • 当调用者 File 表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在 File 数组中返回,包含隐藏文件
  • 当调用者 File 表示的路径是需要权限才能访问的文件夹时,返回 null
package com.faxont.file;import java.io.File;public class FileDemo6 {public static void main(String[] args) {/*public File[] listFiles()       获取当前该路径下所有内容*/// 1. 创建 File 对象File f1 = new File("D:\\java\\workspace");// 2. listFiles() 方法// 作用:获取当前路径下文件夹里的所有内容File[] files = f1.listFiles();for (File file : files) {System.out.println(file);}}
}
方法名称 说明
public static File[] listRoots() 列出可用的文件系统根
public String[] list() 获取当前路径下所有内容
public String[] list(FilenameFilter filter) 利用文件名过滤器获取当前该路径下所有内容
public File[] listFiles() 获取当前该路径下所有内容
public File[] listFiles(FileFilter filter) 利用文件名过滤器获取当前该路径下所有内容
public File[] listFiles(FilenameFilter filter) 利用文件名过滤器获取当前该路径下所有内容
package com.faxont.file;import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Arrays;public class FileDemo7 {public static void main(String[] args) {/*public static File[] listRoots()                    列出可用的文件系统根public String[] list()                              获取当前路径下所有内容public String[] list(FilenameFilter filter)         利用文件名过滤器获取当前该路径下所有内容(掌握)public File[] listFiles()                           获取当前该路径下所有内容public File[] listFiles(FileFilter filter)          利用文件名过滤器获取当前该路径下所有内容public File[] listFiles(FilenameFilter filter)      利用文件名过滤器获取当前该路径下所有内容*/// 1. listRoots 获取系统中所有的盘符File[] roots = File.listRoots();System.out.println(Arrays.toString(roots));// 2. list 获取当前路径下所有内容(仅能获取名字)File file = new File("D:\\java\\workspace");String[] names = file.list();for (String name : names) {System.out.println(name);}System.out.println("--------------------------------------------------------------------------------");// 3. list(FilenameFilter filter) 利用文件名过滤器获取当前该路径下所有内容// 需求:我现在要获取 D:\\java\\hadoop 文件夹里面所有的 txt 文件/*** accept 方法的形参,依次表示 hadoop 文件夹里面每一个文件或者文件夹路径* 参数一:父级路径* 参数二:子级路径* 返回值:如果返回值为 true,就表示当前路径保留*          如果返回值为 false,就表示当前路径舍弃不要*/File file2 = new File("D:\\java\\hadoop");String[] list = file2.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {return new File(dir, name).isFile() && name.endsWith(".txt");}});
//        String[] list = file2.list((dir, name) -> new File(dir, name).isFile() && name.endsWith(".txt"));for (String name : list) {System.out.println(name);}}
}
package com.faxont.file;import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;public class FileDemo8 {public static void main(String[] args) {/*(掌握)public File[] listFiles()                           获取当前该路径下所有内容public File[] listFiles(FileFilter filter)          利用文件名过滤器获取当前该路径下所有内容public File[] listFiles(FilenameFilter filter)      利用文件名过滤器获取当前该路径下所有内容*/// 1. 创建 File 对象File file = new File("D:\\java\\hadoop");// 2. 需求:打印里面所有的 txt 文件File[] files = file.listFiles();for (File f : files) {// f 表示 D:\\java\\hadoop 文件夹里面每一个文件或者文件夹的路径if (f.isFile() && f.getName().endsWith(".txt")) {System.out.println(f);}}System.out.println("--------------------------------------------------------------------------------");// FileFilter 和 FilenameFilter 的区别:// FileFilter 是文件过滤器,FilenameFilter 是文件名过滤器// 接收的参数不同
//        File[] listFiles = file.listFiles(new FileFilter() {
//            @Override
//            public boolean accept(File pathname) {
//                return pathname.isFile() && pathname.getName().endsWith(".txt");
//            }
//        });File[] listFiles = file.listFiles(pathname -> pathname.isFile() && pathname.getName().endsWith(".txt"));for (File f : listFiles) {System.out.println(f);}System.out.println("--------------------------------------------------------------------------------");// 与之前的区别:listFiles 方法返回值是一个数组,而 list 方法返回值是一个字符串数组
//        File[] listFiles2 = file.listFiles(new FilenameFilter() {
//            @Override
//            public boolean accept(File dir, String name) {
//                return new File(dir, name).isFile() && name.endsWith(".txt");
//            }
//        });File[] listFiles2 = file.listFiles((dir, name) -> new File(dir, name).isFile() && name.endsWith(".txt"));for (File f : listFiles2) {System.out.println(f);}}
}

综合练习

File 类相关的 API 练习题

练习1

需求:

​ 在当前模块下的 aaa 文件夹中创建一个 a.txt 文件

package com.faxont.test;import java.io.File;
import java.io.IOException;public class Test1 {public static void main(String[] args) throws IOException {/*在当前模块下的 aaa 文件夹中创建一个 a.txt 文件*/// 1. 创建 a.txt 的父级路径File file = new File("file\\aaa");if (!file.exists()) {file.mkdir();}// 2. 拼接父级路径和子级路径File src = new File(file, "a.txt");boolean b = src.createNewFile();if(b){System.out.println("创建成功");}else{System.out.println("创建失败");}}
}

练习2

需求:

​ 定义一个方法,找某一个文件夹中是否有以sql结尾的文件(暂时不需要考虑子文件夹)

package com.faxont.test;import java.io.File;public class Test2 {public static void main(String[] args) {/*定义一个方法,找某一个文件夹中是否有以sql结尾的文件(暂时不需要考虑子文件夹)*/// 1. 创建 File 对象File file = new File("D:\\java\\workspace");File file2 = new File("D:\\java");// 2. 调用方法System.out.println(findFile(file));System.out.println(findFile(file2));}public static boolean findFile(File file){File[] files = file.listFiles();for (File f : files) {if (f.isFile() && f.getName().endsWith(".sql")) {return true;}}return false;}
}

练习3

需求:

​ 定义一个方法,找某一个文件夹中是否有以sql结尾的文件(需要考虑子文件夹)

package com.faxont.test;import java.io.File;public class Test3 {public static void main(String[] args) {/*定义一个方法,找某一个文件夹中是否有以sql结尾的文件(需要考虑子文件夹)*/// 1. 创建 File 对象File file = new File("D:\\java\\workspace");File file2 = new File("D:\\java");// 2. 调用方法System.out.println(findFile(file));System.out.println(findFile(file2));}public static boolean findFile(File file){File[] files = file.listFiles();if (files != null) {for (File f : files) {if (f.isFile() && f.getName().endsWith(".sql")) {return true;}if (f.isDirectory()) {boolean b = findFile(f);if (b) {return true;}}}}return false;}
}

练习4

需求:

​ 删除一个多级文件夹

package com.faxont.test;import java.io.File;public class Test4 {public static void main(String[] args) {/*删除一个多级文件夹*/// 1. 创建 File 对象File file = new File("D:\\java\\workspace\\test\\a");// 2. 调用方法System.out.println(deleteDir(file));}public static boolean deleteDir(File dir){File[] files = dir.listFiles();for (File f : files) {if (f.isFile()) {boolean delete = f.delete();if (!delete) {return false;}} else {boolean deleteDir = deleteDir(f);if (!deleteDir) {return false;}}}return dir.delete();}
}

练习5

需求:统计一个文件夹中每种文件的个数并打印。(考虑子文件夹)

打印格式如下:

​ txt:3个

​ doc:4个

package com.faxont.test;import java.io.File;
import java.util.HashMap;public class Test5 {public static void main(String[] args) {/*需求:统计一个文件夹中每种文件的个数并打印。(考虑子文件夹)打印格式如下:txt:3个doc:4个*/// 1. 创建 File 对象File file = new File("D:\\java\\hadoop");// 2. 创建 HashMap 集合,用于存储文件类型和文件个数HashMap<String, Integer> map = new HashMap<>();// 3. 调用方法countFile(file, map);map.forEach((k, v) -> System.out.println(k + ":" + v + "个"));}public static void countFile(File file, HashMap<String, Integer> map){File[] files = file.listFiles();if(files == null || files.length == 0){throw new SecurityException(file + "是空文件夹");}for (File f : files) {if(f.isFile()){String name = f.getName();int index = name.lastIndexOf(".");if(index == -1 || index == name.length() - 1){map.put("未知文件", map.getOrDefault("未知文件", 0) + 1);}else{String type = name.substring(index + 1);map.put(type, map.getOrDefault(type, 0) + 1);}}else{countFile(f, map);}}}
}

练习6

需求:统计一个文件夹的总大小

package com.faxont.test;import java.io.File;public class Test6 {public static void main(String[] args) {/*需求:统计一个文件夹的总大小*/// 1. 创建 File 对象File file = new File("D:\\java\\hadoop");// 2. 调用方法System.out.println(getTotalSize(file));}public static long getTotalSize(File file){File[] files = file.listFiles();long size = 0;for (File f : files) {if(f.isFile()){size += f.length();}else{size += getTotalSize(f);}}return size;}
}
http://www.jsqmd.com/news/683123/

相关文章:

  • 投资尽调是什么?2026年AI驱动的尽调新范式
  • 同学都在偷偷用的降重神器,你还在手动改到崩溃?
  • 为什么Linux内核、Zephyr RTOS和AUTOSAR AP已率先签署2026合规承诺?C工程师不可错过的5项底层机制演进真相
  • 5分钟搭建免费音乐聚合API:一站式获取网易云、QQ、酷狗、酷我音乐播放地址完整指南
  • AI 会进化,人类还能掌控吗?
  • 企业级托管钱包架构设计与MPC密钥管理:基于Go语言的生产级实践
  • 2026年SCMP供应链管理专家报考条件,看看你能不能报名? - 众智商学课栈
  • NVIDIA TAO Toolkit:边缘视觉AI开发实战指南
  • 3步轻松下载B站视频:BiliDownloader让你永久保存精彩内容
  • RWKV7-1.5B-world作品分享:10组中英双语连续对话截图+生成耗时统计
  • 终极免费网盘直链下载助手:八大平台一键获取真实下载地址的完整指南
  • Blues Wireless Wi-Fi Notecard M.2模块特性与应用解析
  • 当Zotero学会思考:用Actions Tags插件打造智能文献工作流
  • Phi-3.5-Mini-Instruct 内存与显存优化技巧:让小模型发挥大作用的配置秘籍
  • 【Docker沙箱安全实战指南】:20年运维专家亲授5大隔离陷阱与零信任配置法
  • UE4开发避坑:手把手教你搞定PS4和Switch Pro手柄的Raw Input插件配置
  • Photon-GAMS光影包技术解析:游戏渲染管线的深度优化方案
  • LM文生图Web服务高可用:supervisor进程守护与异常自动重启
  • 开源桌面分区神器NoFences:免费打造高效Windows工作空间
  • 树模型在时间序列预测中的实战应用与优化
  • Qwen3.5-2B智能运维实践:利用Python脚本实现系统监控告警
  • 终极护眼解决方案:Project Eye如何拯救你的数字健康
  • 深度学习在乳腺癌诊断中的技术突破与应用实践
  • GitOps 实战:ArgoCD 在生产环境的多集群部署与管理
  • 兼容性测试:OpenClaw配合SOCKS5代理的稳定性实测
  • Blazor 2026开发环境强制升级倒计时:.NET 9 SDK将在2026年4月1日终止对<9.0.200版本的NuGet签名验证(立即执行迁移检查清单)
  • Boss-Key老板键:终极隐私保护指南,3分钟打造你的数字隐身盾牌
  • 稳压可调节电源模块主流厂家实测排行一览 - 资讯焦点
  • SteamCMD 命令查询:3步重构你的服务器管理体验
  • Python实现经验分布函数(EDF)详解与应用