Java—File类

mac2026-06-22  0

文章目录

File类介绍静态成员变量构造方法获取功能的方法判断功能的方法创建、删除文件和文件夹功能的方法目录遍历功能的方法递归遍历目录

File类

介绍

java.io.File类

文件和目录路径名(文件夹)的抽象表示形式。我们可以使用File类对文件和文件夹进行操作

静态成员变量

名称解释static String pathSeparator与系统有关的路径分隔符,为了方便,它被表示为一个字符串static char pathSeparatorChar与系统有关的路径分隔符static String separator与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串static char separatorChar与系统有关的默认名称分隔符

注意:

路径分隔符 windows:分号; linux:冒号:文件名称分隔符 windows:反斜杠\ linux:正斜杠/ import java.io.File; public class Demo01File { public static void main(String[] args) { // pathSeparatorChar和pathSeparator其实一样,就是一个是字符,一个是字符串 System.out.println(File.pathSeparator); // 路径分隔符 windows:分号; linux:冒号: // separatorChar和separator其实一样,就是一个是字符,一个是字符串 System.out.println(File.separator); // 文件名称分隔符 windows:反斜杠\ linux:正斜杠/ } }

输出结果:

; \

构造方法

File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。

File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。

相关知识补充: 路径分2种,绝对路径和相对路径。 绝对路径:一个完整的路径,从盘符(C:,D:)开始 举例: C:\a.txt E:\Coding\Java\java-study2\a.txt

相对路径:相对于当前项目的根目录(E:\Coding\Java\java-study2) 举例: E:\Coding\Java\java-study2\a.txt,用相对路径可以简化成 a.txt(省略项目的根目录)

注意:

路径不区分大小写路径中的文件名称分隔符在windows中用反斜杠,反斜杠是转义字符,两个反斜杠代表一个反斜杠 import java.io.File; public class Demo02File { public static void main(String[] args) { show1(); show2(); show3(); } /** * File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 * String pathname:路径名称 * * 路径可以是文件或者文件夹 * 路径可以是绝对路径或者相对路径 * 路径可以是真实存在或者不存在 */ private static void show1() { // 绝对路径和文件 File file1 = new File("C:\\a.txt"); System.out.println(file1); // C:\a.txt // 绝对路径和文件夹 File file2 = new File("C:\\java\\a"); System.out.println(file2); // C:\java\a // 相对路径文件 File file3 = new File("a.txt"); System.out.println(file3); // a.txt } /** * File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 * String parent:父路径名称 * String child:子路径名称 * 优点: * 父子路径都可以更改,使用更灵活 */ private static void show2() { File file = new File("C:\\","a.txt"); System.out.println(file); // C:\a.txt } /** * File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 * File parent:File类对象的父路径 * String child:字符串子路径 * 优点: * 子路径都可以更改,使用更灵活 */ private static void show3() { File parent = new File("C:\\"); File file = new File(parent,"a.txt"); System.out.println(file); // C:\a.txt } }

获取功能的方法

Public String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。

Public String getPath() 将此抽象路径名转换为一个路径名字符串。

Public String getName() 返回由此抽象路径名表示的文件或目录的名称。

public long length()返回由此抽象路径名表示的文件的长度。如果此路径名表示一个目录,则返回值是不确定的。

import java.io.File; public class Demo03File { public static void main(String[] args) { show1(); show2(); show3(); show4(); } /** * Public String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。 * 无论构造方法传入的是绝对路径还是相对路径,该方法返回的都是绝对路径 */ private static void show1() { File file1 = new File("E:\\Coding\\Java\\java-study2\\a.txt"); System.out.println(file1.getAbsolutePath()); // E:\Coding\Java\java-study2\a.txt File file2 = new File("a.txt"); System.out.println(file2.getAbsolutePath()); // E:\Coding\Java\java-study2\a.txt } /** * Public String getPath() 将此抽象路径名转换为一个路径名字符串。 * 构造方法传入相对路径则返回相对路径,反之则绝对路径 * * toString()实际上调用的是getPath()方法 * 源码: * public String toString() { * return getPath(); * } */ private static void show2() { File file1 = new File("E:\\Coding\\Java\\java-study2\\a.txt"); System.out.println(file1.getPath()); // E:\Coding\Java\java-study2\a.txt File file2 = new File("a.txt"); System.out.println(file2.getPath()); // a.txt System.out.println(file1); // E:\Coding\Java\java-study2\a.txt System.out.println(file1.toString()); // E:\Coding\Java\java-study2\a.txt } /** * Public String getName() 返回由此抽象路径名表示的文件或目录的名称,即获取结尾部分(文件或文件夹) * */ private static void show3() { File file1 = new File("E:\\Coding\\Java\\java-study2\\a.txt"); System.out.println(file1.getName()); // a.txt File file2 = new File("E:\\Coding\\Java\\java-study2"); System.out.println(file2.getName()); // java-study2 } /** * public long length()返回由此抽象路径名表示的文件的长度。如果此路径名表示一个目录,则返回值是不确定的。 * 获取指定的文件大小,单位是字节 * 注意: * 文件夹是没有大小概念的 * 给定路径不存在,会返回0 */ private static void show4() { // 文件夹 File file1 = new File("E:\\Coding\\Java\\java-study2"); System.out.println(file1.length()); // 4096 windows系统中文件夹默认4096字节,该大小可以自定义,不同操作系统默认大小可能不同。 // 真实存在的文件 File file2 = new File("E:\\Coding\\Java\\java-study2\\a.txt"); System.out.println(file2.length()); // 14 // 不存在的文件 File file3 = new File("E:\\Coding\\Java\\java-study2\\b.txt"); System.out.println(file3.length()); // 0 } }

判断功能的方法

boolean exists() 判断此抽象路径名表示的文件或目录是否存在。

boolean isFile() 判断此抽象路径名表示的文件是否是一个标准文件。不存在的路径则返回false。

boolean isDirectory() 判断此抽象路径名表示的文件是否是一个目录。不存在的路径则返回false。

import java.io.File; public class Demo04File { public static void main(String[] args) { /** * boolean exists() 判断此抽象路径名表示的文件或目录是否存在。 * * boolean isDirectory() 判断此抽象路径名表示的文件是否是一个目录。 * 不存在的路径则返回false * * boolean isFile() 判断此抽象路径名表示的文件是否是一个标准文件。 * 不存在的路径则返回false */ // 真实存在的文件 File file1 = new File("E:\\Coding\\Java\\java-study2\\a.txt"); // 真实存在的文件夹 File file2 = new File("E:\\Coding\\Java\\java-study2"); // 不存在的文件 File file3 = new File("E:\\Coding\\Java\\java-study2\\b.txt"); // 不存在的文件夹 File file4 = new File("E:\\Coding\\Java\\java-study3"); // 判断是否存在 System.out.println("E:\\Coding\\Java\\java-study2\\a.txt 是否存在:" + file1.exists()); System.out.println("E:\\Coding\\Java\\java-study2 是否存在:" + file2.exists()); System.out.println("E:\\Coding\\Java\\java-study2\\b.txt 是否存在:" + file3.exists()); System.out.println("E:\\Coding\\Java\\java-study3 是否存在:" + file4.exists()); // 判断是不是文件 System.out.println("E:\\Coding\\Java\\java-study2\\a.txt 是文件吗?:" + file1.isFile()); System.out.println("E:\\Coding\\Java\\java-study2 是文件吗?:" + file2.isFile()); System.out.println("E:\\Coding\\Java\\java-study2\\b.txt 是文件吗?:" + file3.isFile()); System.out.println("E:\\Coding\\Java\\java-study3 是文件吗?:" + file4.isFile()); // 判断是不是文件夹 System.out.println("E:\\Coding\\Java\\java-study2\\a.txt 是文件夹吗?:" + file1.isDirectory()); System.out.println("E:\\Coding\\Java\\java-study2 是文件夹吗?:" + file2.isDirectory()); System.out.println("E:\\Coding\\Java\\java-study2\\b.txt 是文件夹吗?:" + file3.isDirectory()); System.out.println("E:\\Coding\\Java\\java-study3 是文件夹吗?:" + file4.isDirectory()); } }

输出结果:

E:\Coding\Java\java-study2\a.txt 是否存在:true E:\Coding\Java\java-study2 是否存在:true E:\Coding\Java\java-study2\b.txt 是否存在:false E:\Coding\Java\java-study3 是否存在:false E:\Coding\Java\java-study2\a.txt 是文件吗?:true E:\Coding\Java\java-study2 是文件吗?:false E:\Coding\Java\java-study2\b.txt 是文件吗?:false E:\Coding\Java\java-study3 是文件吗?:false E:\Coding\Java\java-study2\a.txt 是文件夹吗?:false E:\Coding\Java\java-study2 是文件夹吗?:true E:\Coding\Java\java-study2\b.txt 是文件夹吗?:false E:\Coding\Java\java-study3 是文件夹吗?:false

创建、删除文件和文件夹功能的方法

public boolean createNewFile() throws IOException 当且仅当不存在具有此抽象路径名指定名称的文件时,创建一个新的空文件。

boolean mkdir() 创建单级文件夹。 boolean mkdirs() 既可创建单级文件夹,也可以创建多级文件夹。

public boolean delete() 删除指定路径名表示的文件或目录

import java.io.File; public class Demo05File { public static void main(String[] args) throws IOException { show1(); show2(); show3(); } /** * public boolean createNewFile() throws IOException 当且仅当不存在具有此抽象路径名指定名称的文件时,创建一个新的空文件。 * 创建的文件的路径和文件名有构造方法传入 * true:文件不存在,创建文件,返回true * flase:文件存在,不会创建,返回false */ private static void show1() throws IOException { File file1 = new File("E:\\Coding\\Java\\java-study2\\src\\com\\zsd\\stage1_3_6\\demo1\\a.txt"); boolean b = file1.createNewFile(); System.out.println("是否成功创建新文件?:" + b); // 是否成功创建新文件?:true b = file1.createNewFile(); System.out.println("是否成功创建新文件?:" + b); // 是否成功创建新文件?:false } /** * boolean mkdir() 创建单级文件夹。 * boolean mkdirs() 既可创建单级文件夹,也可以创建多级文件夹。 * true:文件夹不存在,创建文件夹,返回true * false:文件夹存在,不会创建文件夹,返回false。构造方法给出路径不存在,返回false。 */ private static void show2() { // 创建单级文件夹 File file1 = new File("111"); boolean b1 = file1.mkdir(); System.out.println(b1); // true // 创建多级文件夹 File file2 = new File("222\\333\\444\\555"); boolean b2 = file2.mkdirs(); System.out.println(b2); // true // 在前面创建了一部分文件夹的基础上,继续创建文件夹 File file3 = new File("222\\333\\444\\555\\666"); boolean b3 = file3.mkdirs(); System.out.println(b3); // true } /** * public boolean delete() 删除指定路径名表示的文件或目录 * true:删除文件或文件夹成功,返回true * false:文件夹中有内容,不会删除,返回false。构造方法的路径不存在,返回false。 * 注意: * 被删除的文件或文件夹直接从硬盘消失,不会出现在回收站!!! */ private static void show3() { File file1 = new File("E:\\Coding\\Java\\java-study2\\src\\com\\zsd\\stage1_3_6\\demo1\\a.txt"); boolean b1 = file1.delete(); System.out.println("第1次删除a.txt:"+b1); // 第1次删除a.txt:true boolean b2 = file1.delete(); System.out.println("第2次删除a.txt:"+b2); // 第2次删除a.txt:false File file2 = new File("111"); boolean b3 = file2.delete(); System.out.println("删除空文件夹111:"+b3); // 删除空文件夹111:true File file3 = new File("222"); boolean b4 = file3.delete(); System.out.println("删除内部还有多级文件夹的222:"+b4); // 删除内部还有多级文件夹的222:false // 不存在的文件夹 File file4 = new File("777"); boolean b5 = file4.delete(); System.out.println("删除不存在的文件夹777:"+b5); // 删除不存在的文件夹777:false } }

目录遍历功能的方法

public String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。

public File[] listFiles()返回一个File数组,这些路径名表示此抽象路径名表示的目录中的文件。

import java.io.File; // 目录遍历 public class Demo06File { public static void main(String[] args) { show1(); show2(); } /** * public String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 * * 遍历构造方法传入的目录,把目录下的文件和文件夹名称全部存到String数组中(可以遍历到隐藏的文件和文件夹) * 点击文件或者文件夹右键选择属性,隐藏选项打钩,应用确定,文件或者文件夹就隐藏了。 * * 构造方法的目录不存在,抛空指针异常 * 构造方法传入的不是一个目录,抛空指针异常 */ private static void show1() { // 真实存在的文件夹目录 File file1 = new File("E:\\Coding\\Java\\java-study2\\src\\com\\zsd\\stage1_3_6\\demo1"); // 构造方法的目录不存在,抛空指针异常 //File file1 = new File("E:\\Coding\\Java\\java-study2\\src\\com\\zsd\\stage1_3_6\\demo100"); // 构造方法传入的不是一个目录,抛空指针异常 // 即使传入真实存在的文件路径,也抛出空指针异常 //File file1 = new File("E:\\Coding\\Java\\java-study2\\src\\com\\zsd\\stage1_3_6\\aa.txt"); String[] list = file1.list(); for (String s : list) { System.out.println(s); } // 输出结果 // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\aa.txt // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\Demo01File.java // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\Demo02File.java // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\Demo03File.java // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\Demo04File.java // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\Demo05File.java // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\Demo06File.java // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\我是一个隐藏文件.txt // E:\Coding\Java\java-study2\src\com\zsd\stage1_3_6\demo1\我是一个隐藏文件夹 } /** * public File[] listFiles()返回一个File数组,这些路径名表示此抽象路径名表示的目录中的文件。 * * 遍历构造方法传入的目录,把目录下的文件和文件夹名称封装成File对象,并存到File数组中(可以遍历到隐藏的文件和文件夹) */ private static void show2() { // 真实存在的文件夹目录 File file1 = new File("E:\\Coding\\Java\\java-study2\\src\\com\\zsd\\stage1_3_6\\demo1"); File[] list = file1.listFiles(); for (File file : list) { System.out.println(file); } // 输出结果 // aa.txt // Demo01File.java // Demo02File.java // Demo03File.java // Demo04File.java // Demo05File.java // Demo06File.java // 我是一个隐藏文件.txt // 我是一个隐藏文件夹 } }

递归遍历目录

/** * 递归遍历得到文件夹下所有的文件夹和文件 * 使用listFiles()只能得到下一级的文件和文件夹 * 例如: * a\b\c.txt 使用listFiles()方法遍历a文件夹,只能遍历到c文件夹,遍历不到c文件夹下的test.txt * * 测试的文件目录结构如下: * D:\a * D:\a\b * D:\a\b\c * D:\a\b\c.txt * D:\a\b.txt * */ import java.io.File; public class Demo07File { public static void main(String[] args) { File file = new File("D:\\a"); // 1.只使用使用listFiles()方法遍历 File[] files = file.listFiles(); for (File f : files) { System.out.println(f.getAbsolutePath()); } System.out.println("=============分割线=============="); // 2.递归遍历 getFiled(file); } private static void getFiled(File dir) { // 打印要遍历的目录 System.out.println(dir.getAbsolutePath()); // 遍历当前目录 File[] files = dir.listFiles(); for (File file : files) { if(file.isDirectory()){ // 还是目录就递归调用自己 getFiled(file); }else{ // 文件 System.out.println(file.getAbsolutePath()); } } } }

输出结果:

D:\a\b D:\a\b.txt =============分割线============== D:\a D:\a\b D:\a\b\c D:\a\b\c.txt D:\a\b.txt
最新回复(0)