File学习

张开发
2026/5/30 6:47:16 15 分钟阅读
File学习
File的构造方法package com.fast.File; import java.awt.*; 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) 根据父路径对应文件对象和子路径名字符串创建文件对象 C:\Users\alienware\Desktop */ //1.根据字符串表示的路径变成File对象 String str C:\\Users\\alienware\\Desktop\\a.txt; File f1 new File(str); System.out.println(f1);//C:\Users\alienware\Desktop\a.txt //2. 父级路径: //C:\Users\alienware\Desktop //子级路径: //a.txt String parent C:\\Users\\alienware\\Desktop; String child a.txt; File f2 new File(parent, child); System.out.println(f2);//C:\Users\alienware\Desktop\a.txt File f3 new File(parent \\ child); System.out.println(f3);//C:\Users\alienware\Desktop\a.txt //3. 把一个File表示的路径和String表示路径进行拼接 File parent2 new File(C:\\Users\\alienware\\Desktop); String child2 a.txt; File f4 new File(parent2, child2); System.out.println(f4);//C:\Users\alienware\Desktop\a.txt } }构造方法一直接传递完整路径这是最直观的方法直接把文件从盘符开始的完整路径写成一个字符串。代码体现File f1 new File(str);适用场景当你的文件路径是固定的、完整的字符串时例如从配置文件读取。注意在 Java 字符串中路径分隔符\是转义字符所以必须写成\\。构造方法二父路径 子路径字符串拼接这种方法将路径拆分为“文件夹路径”和“文件名”两部分代码可读性更好也更灵活。代码体现File f2 new File(parent, child);优势如果需要在同一个文件夹下操作多个文件只需要定义一次parent字符串然后改变child即可。手动拼接代码中的f3展示了手动用 \\ 拼接字符串的方式虽然也能实现但使用f2的构造方法更规范、更安全。构造方法三父路径File对象 子路径这是第二种方法的变体它的“父路径”部分本身就是一个File对象而不是字符串。代码体现File f4 new File(parent2, child2);适用场景当你已经通过某种方式获得了一个代表目录的File对象例如通过listFiles()遍历目录时想在它下面继续找文件用这种方式最方便。关键点解析File 对象的作用运行代码你会发现打印f1、f2等对象时输出的是路径字符串。这说明File类主要是一个路径管理器它负责封装路径信息并进行文件的创建、删除、判断是否存在等操作。路径分隔符代码中使用了\\。在 Windows 系统中路径分隔符是\在 Linux/Unix 中是/。为了代码的跨平台兼容性更专业的写法是使用File.separator例如C: File.separator Users ...。文件是否存在这段代码只是创建了File对象在内存中建立了一个路径映射并没有去硬盘上真正创建这个a.txt文件。如果此时去桌面上看是找不到这个文件的除非后续调用了f1.createNewFile()方法。1.File的成员方法判断、获取1.判断isDirectory(): 判断路径是否为文件夹。isFile(): 判断路径是否为文件。exists(): 判断路径在硬盘上是否真实存在。package com.fast.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:\\aaa\\a.txt); System.out.println(f1.isDirectory());//false System.out.println(f1.isFile());//true System.out.println(f1.exists());//true System.out.println(--------------------------------); //2.对一个文件夹的路径进行判断 File f2 new File(D:\\aaa\\bbb); System.out.println(f2.isDirectory());//true System.out.println(f2.isFile());//false System.out.println(f2.exists());//true //3.对一个不存在的路径进行判断 File f3 new File(D:\\aaa\\c.txt); System.out.println(f3.isDirectory());//false System.out.println(f3.isFile());//false System.out.println(f3.exists());//false } }核心方法解析isDirectory(): 判断路径是否为文件夹。isFile(): 判断路径是否为文件。exists(): 判断路径在硬盘上是否真实存在。场景分析代码通过三个场景展示了这些方法的逻辑场景 1判断一个存在的文件f1isDirectory()返回false因为它是文件不是文件夹。isFile()返回true它确实是一个文件。exists()返回true该路径在硬盘上真实存在。场景 2判断一个存在的文件夹f2isDirectory()返回true它确实是一个文件夹。isFile()返回false因为它是文件夹不是文件。exists()返回true该路径在硬盘上真实存在。场景 3判断一个不存在的路径f3isDirectory()返回false路径不存在自然不是文件夹。isFile()返回false路径不存在自然也不是文件。exists()返回false明确表示该路径在硬盘上找不到。逻辑总结互斥性对于同一个存在的路径isDirectory()和isFile()的结果通常是互斥的一个为true另一个必为false。前提条件isDirectory()和isFile()的判断前提是文件必须存在。如果exists()返回false那么前两个方法一定都会返回false。建议在实际开发中建议先调用exists()确认路径存在再进行具体的类型判断。2.获取public long length() 返回文件的大小字节数量public String getAbsolutePath() 返回文件的绝对路径public String getPath() 返回定义文件时使用的路径public String getName() 返回文件的名称带后缀public long lastModified() 返回文件的最后修改时间时间毫秒值package com.fast.File; import java.io.File; 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这个方法只能获取文件的大小单位是字节 //如果单位我们要M, G可以不断的除以1024 //细节2这个方法无法获取文件夹的大小 //如果我们要获取一个文件夹的大小需要把这个文件夹里面所有的文件大小都累加在一起。 File f1 new File(D:\\aaa\\a.txt); long len f1.length(); System.out.println(len);//12 File f2 new File(D:\\aaa\\bbb); long len2 f2.length(); System.out.println(len2);//0 System.out.println(); //2.getAbsolutePath 返回文件的绝对路径 File f3 new File(D:\\aaa\\a.txt); String path1 f3.getAbsolutePath(); System.out.println(path1); File f4 new File(myFile\\a.txt); String path2 f4.getAbsolutePath(); System.out.println(path2); System.out.println(); //3.getPath 返回定义文件时使用过的路径 File f5 new File(D:\\aaa\\a.txt); String path3 f5.getPath(); System.out.println(path3); File f6 new File(myFile\\a.txt); String path4 f6.getPath(); System.out.println(path4); System.out.println(); //4.getName 获取名字 //细节1: //a.txt: // a 文件名 // txt 后缀名、扩展名 //细节2: //文件夹: 返回的就是文件夹的名字 File f7 new File(D:\\aaa\\a.txt); String name1 f7.getName(); System.out.println(name1); File f8 new File(D:\\aaa\\bbb); String name2 f8.getName(); System.out.println(name2);//bbb System.out.println(); //5.lastModified 返回文件的最后修改时间时间毫秒值 File f9 new File(D:\\aaa\\a.txt); long time f9.lastModified(); System.out.println(time);//1667380952425 } }1.length()获取文件大小方法作用返回文件的长度单位是字节。代码演示f1文件返回12表示a.txt占用了 12 个字节。f2文件夹返回0。关键细节length()方法不能直接获取文件夹的大小。在 Java 中直接对文件夹调用此方法永远返回0。如果需要计算文件夹大小必须使用递归遍历文件夹内的所有文件并累加。2.getAbsolutePath()获取绝对路径方法作用返回文件的绝对路径从盘符开始的完整路径。代码演示f3绝对路径创建创建时就是D:\\aaa\\a.txt返回原样。f4相对路径创建创建时是myFile\\a.txt调用此方法后Java 会自动补全为当前项目根目录\myFile\a.txt。应用场景当你不确定文件在哪里或者需要记录文件在硬盘上的确切位置时使用。3.getPath()获取定义路径方法作用返回创建File对象时传入的字符串路径。代码演示f5返回D:\\aaa\\a.txt。f6返回myFile\\a.txt。与getAbsolutePath的区别getPath()只是把当初写的那串字符串拿出来不做任何补全或解析而getAbsolutePath()会解析出完整路径。4.getName()获取名称方法作用获取路径中最后一个斜杠后面的内容。代码演示f7文件返回a.txt包含扩展名。f8文件夹返回bbb。关键细节它只关心路径的“尾巴”。无论是文件还是文件夹它都返回最后一级的名字。5.lastModified()获取最后修改时间方法作用返回文件最后一次修改的时间格式是时间毫秒值Long 类型。代码演示f9返回1667380952425。关键细节这个数字代表从1970年1月1日 00:00:00到文件修改那一刻经过的毫秒数。后续处理这个数字人类无法直接阅读通常需要使用SimpleDateFormat或DateTimeFormatter将其转换为“年-月-日 时:分:秒”的格式。2.File的成员方法创建、删除创建public class FileDemo4 { public static void main(String[] args) throws IOException { /* public boolean createNewFile() 创建一个新的空的文件 public boolean mkdir() 创建单级文件夹 public boolean mkdirs() 创建多级文件夹 public boolean delete() 删除文件、空文件夹 */ //1.createNewFile 创建一个新的空的文件 //细节1如果当前路径表示的文件是不存在的则创建成功方法返回true // 如果当前路径表示的文件是存在的则创建失败方法返回false //细节2如果父级路径是不存在的那么方法会有异常IOException //细节3createNewFile方法创建的一定是文件如果路径中不包含后缀名则创建 /*File f1 new File(D:\\aaa\\ddd); boolean b f1.createNewFile(); System.out.println(b);//true*/ //2.mkdir make Directory, 文件夹 (目录) //细节1: windows当中路径是唯一的如果当前路径已经存在则创建失败返回false //细节2: mkdir方法只能创建单级文件夹无法创建多级文件夹。 /* File f2 new File(D:\\aaa\\aaa\\bbb\\ccc); boolean b f2.mkdir(); System.out.println(b);*/ //3.mkdirs 创建多级文件夹 //细节: 既可以创建单级的又可以创建多级的文件夹 File f3 new File(D:\\aaa\\ggg); boolean b f3.mkdirs(); System.out.println(b);//true } }核心方法概览代码注释中列出了四个关键方法createNewFile()创建一个新的空文件。mkdir()创建单级文件夹目录。mkdirs()创建多级文件夹。delete()删除文件或空文件夹。代码分段解析createNewFile()功能创建一个由抽象路径名命名的新空文件。返回值true如果文件不存在并成功创建。false如果文件已经存在。异常处理该方法声明抛出IOException。如果父路径例如D:\aaa不存在或者由于磁盘满等原因无法创建会抛出此异常。细节它只能创建文件。即使路径名没有后缀它创建的也是文件对象而非文件夹。mkdir()功能创建由此抽象路径名命名的目录。局限性单级创建它只能创建一层目录。代码注释中的示例D:\aaa\aaa\bbb\ccc演示了这一点。如果D:\aaa\aaa\bbb这一路径本身不存在mkdir()就会失败并返回false。唯一性如果该路径的文件夹已经存在创建也会失败返回false。mkdirs()功能创建由此抽象路径名命名的目录包括任何必需但不存在的父目录。优势这是实际开发中更常用的方法。它会自动检查路径如果父目录不存在它会先创建父目录再创建子目录。代码执行File f3 new File(D:\\aaa\\ggg);配合f3.mkdirs();即使D:\aaa不存在也会一并被创建出来最终返回true。删除public class FileDemo5 { public static void main(String[] args) { /* public boolean delete() 删除文件、空文件夹 细节1: 如果删除的是文件则直接删除不走回收站。 如果删除的是空文件夹则直接删除不走回收站 如果删除的是有内容的文件夹则删除失败 */ //1.创建File对象 File f1 new File(D:\\aaa\\eee); //2.删除 boolean b f1.delete(); System.out.println(b); } }方法作用与风险public boolean delete()用于删除文件或文件夹。最需要注意的是Java 的删除操作是直接物理删除文件不会进入操作系统的回收站一旦删除无法通过常规手段恢复请务必谨慎使用。删除规则文件可以直接删除。空文件夹可以直接删除。非空文件夹有内容的文件夹删除会失败方法返回false。代码逻辑File f1 new File(D:\\aaa\\eee);指向一个路径。boolean b f1.delete();尝试删除该路径。System.out.println(b);打印结果。如果eee是文件或空文件夹输出true如果eee是一个包含文件的文件夹输出false。3.File的成员方法获取并遍历public class FileDemo6 { public static void main(String[] args) { //public File[] listFiles() 获取当前该路径下所有内容 //1.创建File对象 File f new File(D:\\aaa); //2.listFiles方法 //作用: 获取aaa文件夹里面的所有内容把所有的内容放到数组中返回 File[] files f.listFiles(); for (File file : files) { //file依次表示aaa文件夹里面的每一个文件或者文件夹 System.out.println(file); } } }代码核心解析这段代码演示了如何遍历一个文件夹的内容。listFiles()方法作用获取指定文件夹这里是D:\aaa下的所有文件和子文件夹。返回值返回一个File[]File 数组。数组中的每一个File对象代表文件夹内的一个文件或子目录。注意调用该方法的对象f必须是一个文件夹目录。如果是文件返回null。如果文件夹是空的返回一个长度为 0 的数组。如果文件夹不存在返回null。增强型for循环代码使用了for (File file : files)这种增强型for循环也叫foreach循环来遍历数组。这意味着file变量会依次代表aaa文件夹里的每一个文件或文件夹对象。System.out.println(file)当直接打印File对象时默认调用的是toString()方法输出的是该文件的绝对路径。其他的获取并遍历1. 系统级操作listRoots()特点这是一个静态方法static直接通过类名调用不需要创建File对象。作用获取电脑所有的盘符例如 Windows 下的C:\,D:\等。返回值File[]数组。2. 基础遍历获取所有内容这一类方法用于获取某个文件夹下的所有文件和子文件夹。list()vslistFiles()list()返回的是String[]字符串数组。它只给你文件或文件夹的名字不包含路径信息也不方便进行后续的文件属性判断如判断是文件还是文件夹。listFiles()返回的是File[]File对象数组。这是最常用的方法。它返回的是完整的File对象你可以调用.isDirectory()判断是否为文件夹或者.getAbsolutePath()获取路径等。3. 高级遍历使用过滤器这一类方法允许你只获取符合特定条件的文件例如只获取.jpg图片或只获取以a开头的文件。list(FilenameFilter filter)返回字符串数组配合FilenameFilter接口使用。listFiles(FileFilter filter)返回File对象数组配合FileFilter接口使用。通常用于根据文件属性如是否是文件夹、文件大小进行过滤。listFiles(FilenameFilter filter)返回File对象数组配合FilenameFilter接口使用。通常用于根据文件名如后缀名进行过滤。

更多文章