开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
前言
在Java的核心库java.io提供了全面的IO接口。主要用于系统文件读写、标准设备输出等功能。Java中IO是以流为基础进行输入输出的,通过数据流和对象的序列化将Java的所有对象数据串行化写入输出流,或者从输入流读入。Java基础IO篇系列文章让我们先从学习File类开始吧。
一、概述
java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
二、File类的构造方法
public File(String pathname)
: 通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。public File(String parent, String child)
: 从父路径名字符串和子路径名字符串创建新的 File实例。public File(File parent, String child)
: 从父抽象路径名和子路径名字符串创建新的File实例。
public class Test { public static void main(String[] args) { // public File(String pathname) : // 通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。 File file = new File("D:/io/a.txt"); // pathname的写法 D:/io 等价于 D:\io System.out.println("file:" + file); // D:\io\a.txt\ // public File(String parent, String child) : // 从父路径名字符串和子路径名字符串创建新的 File实例。\ File file1 = new File("D:/io", "a.txt"); System.out.println("file1:" + file1); // D:\io\a.txt\ // public File(File parent, String child) :// 从父抽象路径名和子路径名字符串创建新的File实例。 File file2 = new File("D:/io"); File file3 = new File(file2, "a.txt"); System.out.println("file3:" + file3); // D:\io\a.txt } }
注意:一个File对象代表硬盘中实际存在的一个文件或者目录,给定参数位置的路径(文件或者目录的名称), 无论该路径下是否存在文件或者目录,都不影响File对象的创建。
三、File类获取功能的方法
public String getAbsolutePath()
: 返回此File的绝对路径名字符串。public String getPath()
: 将此File转换为路径名字符串。public String getName()
: 返回由此File表示的文件或目录的名称。public long length()
: 返回由此File表示的文件的长度。【File对象表示目录,则返回值未指定。】
public class Test { public static void main(String[] args) { // 创建File对象 //File file = new File("D:/io/a.txt"); // 绝对路径 File file = new File("day10_io/src/a.txt"); // 相对路径(参照当前项目) // public String getAbsolutePath() : // 返回此File的绝对路径名字符串。 //System.out.println(file.getAbsolutePath()); // D:\io\a.txt\ System.out.println(file.getAbsolutePath()); // D:\Develop\workspace\javaee\itheima3\day10_io\src\a.txt // public String getPath() : // 将此File转换为路径名字符串。 //System.out.println(file.getPath()); // D:\io\a.txt System.out.println(file.getPath()); // day10_io/src/a.txt // public String getName() :// 返回由此File表示的文件或目录的名称。 //System.out.println(file.getName()); // a.txt System.out.println(file.getName()); // // public long length() :// 返回由此File表示的文件的长度。【File对象表示目录,则返回值未指定。】 //System.out.println(file.length()); // 6 【a.txt文件中有数据: abcdef】 System.out.println(file.length()); } }
绝对路径和相对路径
- 绝对路径:【带有盘符!】 从盘符开始的路径,这是一个完整的路径。
例如:D:\Develop\workspace\javaee\itheima3\day10_io\src\a.txt - 相对路径:【不带盘符!】 相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。
例如:day10_io\src\a.txt // 相对于当前项目!
四、File类判断功能的方法
public boolean exists()
: 此File表示的文件或目录是否实际存在。public boolean isDirectory()
: 此File表示的是否为目录。public boolean isFile()
: 此File表示的是否为文件。
public class Test { public static void main(String[] args) { // 创建File对象 File file1 = new File("D:/io/a.txt"); // a.txt是一个文件 File file2 = new File("day10_io/src/a.txt"); // 不存在 File file3 = new File("D:/io/c.txt"); // c.txt是一个目录 // public boolean exists() : // 此File表示的文件或目录是否实际存在。 System.out.println(file1.exists()); // true System.out.println(file2.exists()); // false System.out.println("================="); // public boolean isDirectory() :// 此File表示的是否为目录。 System.out.println(file1.isDirectory()); // false System.out.println(file2.isDirectory()); // false System.out.println(file3.isDirectory()); // true System.out.println("================="); // public boolean isFile() :// 此File表示的是否为文件。 System.out.println(file1.isFile()); // true System.out.println(file2.isFile()); // false System.out.println(file3.isFile()); // false } }
五、File类创建删除功能的方法
public boolean createNewFile()
: 当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。public boolean delete()
: 删除由此File表示的文件或目录。如果File表示目录,则目录必须为空才能删除public boolean mkdir()
: 创建由此File表示的目录。public boolean mkdirs()
: 创建由此File表示的目录,包括任何必需但不存在的父目录。
public class Test { public static void main(String[] args) throws IOException { // 创建File对象 //File file = new File("D:/io/b.txt"); // b.txt文件不存在的! //File file = new File("D:/io/xxx/b.txt"); // b.txt文件不存在的! //File file = new File("D:/io/b"); // b目录里面没有内容 //File file = new File("D:/io/xxx"); // xxx目录里面有内容 File file = new File("D:/io/a.txt"); // xxx目录里面有内容 // 创建文件 //file.createNewFile(); // 创建b.txt文件! // 创建一个目录 //file.mkdir(); // 父目录io存在,创建b.txt目录成功! // 当父目录不存在的情况下,可以调用下面方法! //file.mkdirs(); // 先创建不存在的那个父目录,然后在父目录下面创建指定的子目录 // 可以删除目录(目录里面没有文件),目录里面有内容就删除不了! file.delete(); } }
六、File类目录的遍历
public String[] list()
: 返回一个String数组,表示该File目录中的所有子文件或目录。public File[] listFiles()
: 返回一个File数组,表示该File目录中的所有的子文件或目录。注意:listFiles方法的File对象,表示的必须是实际存在的目录,否则返回null,无法进行遍历
public class Test { public static void main(String[] args) throws IOException { // 创建File对象 File file = new File("D:/io"); // io目录下面有3个内容(a.txt文件<abcdef> c.txt目录 xxx目录) // 获得file对象里面所有的子目录以及文件的字符串形式数据 【使用不多!】 /*String[] list = file.list(); for (String s : list) { System.out.println(s); }*/ // 获得file对象里面所有的子目录以及文件的File对象形式数据 File[] files = file.listFiles(); for (File file1 : files) { if (file1.isDirectory()) { // 继续获得file1里面的文件或者目录 //File[] files1 = file1.listFiles(); // 获得目录的名称 System.out.println(file1.getName()); } else if (file1.isFile()) { // 获得文件里面内容的长度 System.out.println(file1.length()); } } } }
后记
在实际的开发中,前辈们已经将这些基础的File类文件操作的方法封装成具体的工具类,我们在实际开发中只需引入相关的jar包就可以使用工具类操作文件。等介绍完Java基础IO的知识后,我会再写一篇专门介绍IO操作的工具包的使用,敬请期待!
喜欢我的文章的朋友点点喜欢、收藏,也欢迎朋友们评论区留下你的意见和建议,恕毅在此拜谢!