java.io.File类
文件和目录路径名(文件夹)的抽象表示形式。我们可以使用File类对文件和文件夹进行操作注意:
路径分隔符 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 是文件夹吗?:falsepublic 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 // 我是一个隐藏文件夹 } }输出结果:
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