File全面详细讲解(含笔记和练习)

发布时间:2026/6/21 9:36:46
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(文件夹非空无法直接删除); } } } }