Java File类 详解和常用方法

Java File类 详解和常用方法

java.io.File 类是 Java 中用于处理文件和目录路径的类。它提供了文件和目录的创建、删除、重命名等操作,但不直接用于文件的读写。File 类可以用来获取文件和目录的属性,如大小、修改时间等。

主要功能

文件和目录的创建、删除和重命名:createNewFile()、delete()、renameTo(File dest)。

检查文件或目录是否存在:exists()。

获取文件或目录的属性:如length()(大小)、lastModified()(最后修改时间)。

列出目录内容:list()、listFiles()。

检查是文件还是目录:isFile()、isDirectory()。

创建和删除目录:mkdir()、mkdirs()、rmdir()。

目录路径

在处理文件和目录时,路径有两种不同的表示方式绝对路径和相对路径。它们在Java中的java.io.File类和其他相关类中经常使用。

绝对路径

定义:绝对路径是从文件系统的根目录开始的完整路径。它指定了从根目录到文件或目录的确切位置。

特点:

不依赖于当前工作目录。

总是以根目录(如Windows中的盘符C:\、D:\,或Unix/Linux中的/)开始。

在不同的系统之间通常不可移植。

代码示例(Windows系统):

// 使用绝对路径创建File对象

File absFile = new File("D:\\home\\mixia\\java.txt");

System.out.println("绝对路径: " + absFile.getAbsolutePath());

相对路径

定义:相对路径是相对于当前工作目录的路径。它不指定从根目录开始的完整位置。

特点:

依赖于当前工作目录。

不以根目录开始。

在不同的系统之间更易于移植。

// 获取当前工作目录

String workingDirectory = System.getProperty("user.dir");

System.out.println("当前工作目录:" + workingDirectory);

// 使用相对路径创建File对象

File file = new File("uploads/java.txt");

System.out.println("相对路径:" + file.getAbsolutePath());

注意事项

路径分隔符:Windows系统使用反斜杠\作为路径分隔符,而Unix/Linux系统使用斜杠/。

在Java中,你可以使用File.separator来获取当前系统的路径分隔符,以确保跨平台兼容性。

当前工作目录:在Java中,当前工作目录通常是启动Java虚拟机时的工作目录。你可以使用System.getProperty("user.dir")来获取当前工作目录的路径。

构造方法

File(String pathname):根据给定的路径名字符串创建 File 对象。

// 路径和文件名

String pathname = "D:\\home\\mixia\\java.txt";

// 创建 File实例

File f1 = new File(pathname);

System.out.println(f1);// 输出: D:\home\mixia\java.txt

File(String parent, String child):根据父目录路径名和子文件或目录名创建 File 对象。

// 路径

String path = "D:\\home\\mixia";

// 文件名

String fileName = "java.txt";

// 创建 File实例

File file = new File(path, fileName);

System.out.println(file);// 输出:D:\home\mixia\java.txt

File(File parent, String child):根据父 File 对象和子文件或目录名创建 File 对象。

// 创建 父File对象

File f1 = new File("D:\\home\\mixia");

// 创建 File实例

File f2 = new File(f1, "java.txt");

System.out.println(f2);//输出: D:\home\mixia\java.txt

常用方法

路径操作

String getAbsolutePath():获取文件或目录的绝对路径。

String getPath():获取文件或目录的路径。

String getName():获取文件或目录的名称。

String getParent():获取文件或目录的父路径。

File getParentFile():获取文件或目录的父 File 对象。

boolean isAbsolute():判断路径是否为绝对路径。

File getCanonicalFile():返回此 File 对象的规范路径名形式,处理符号链接等特殊情况。

// 使用相对路径创建File对象

File file = new File("uploads/java.txt");

// 获取文件或目录的绝对路径

System.out.println("相对路径: " + file.getAbsolutePath());

// 获取文件或目录的路径。

System.out.println("路径: " + file.getPath());

// 获取文件或目录的名称。

System.out.println("文件名: " + file.getName());

// 获取文件或目录的父路径。

System.out.println("父路径: " + file.getParent());

// 获取文件或目录的父File对象

System.out.println("父File对象: " + file.getParentFile());

// 判断路径是否为绝对路径。

System.out.println("是否为绝对路径? " + file.isAbsolute());

// 返回此 File 对象的规范路径名形式

System.out.println("规范路径名: "+ file.getCanonicalFile()); // 会有IO异常

文件属性检查

boolean exists():判断文件或目录是否存在。

boolean isDirectory():判断是否为目录。

boolean isFile():判断是否为普通文件。

long length():获取文件的长度(字节数)。

long lastModified():获取最后一次修改时间(毫秒值)。

// 文件路径

String filePath = "uploads/java.txt";

// 使用相对路径创建File对象

File file = new File(filePath);

// 判断文件或目录是否存在

System.out.println("文件是否存在? " + file.exists());

// 判断是否为目录

System.out.println("判断是否为目录? " + file.isDirectory());

// 判断是否为普通文件

System.out.println("判断是否为普通文件? " + file.isFile());

if (file.isFile()) {

// 获取文件的长度(字节数)

System.out.println("文件长度: " + file.length() + " 字节");

// 获取最后一次修改时间(毫秒值)

System.out.println("最后修改时间: " + file.lastModified());

}

目录操作

String[] list():列出目录下所有子文件和子目录的名称。

String filePath = "uploads/";// 更改为自己想查看的文件路径

// 创建File对象

File file = new File(filePath);

// 列出指定目录下 子文件名和子目录的名称

String[] list = file.list();

// 数组转字符串并输出

System.out.println(Arrays.toString(list));

File[] listFiles():列出目录下所有子文件和子目录的 File 对象。

String filePath = "uploads/";// 更改为自己想查看的文件路径

// 创建File对象

File file = new File(filePath);

// 列出目录下所有子文件和子目录的 `File` 对象

File[] filesList = file.listFiles();

// 遍历File对象数组,获取每个子对象

for (File file1 : filesList) {

System.out.println(file1);

}

boolean mkdir():创建一个新的空目录。如果该目录已经存在,此方法将不会做任何事情。

// 要创建的新目录名

String newPath = "new_uploads";

// 创建File对象

File file = new File(newPath);

// 创建目录

boolean is_mkdir = file.mkdir();

if (is_mkdir) {

System.out.println(newPath + "目录创建成功!");

} else {

System.out.println(newPath + "目录创建失败!");

}

boolean mkdirs():创建多级目录(如果父目录不存在,会一并创建)。

// 要创建的新目录名

String newPath = "dir002/new_uploads";

// 创建File对象

File file = new File(newPath);

// 创建目录

boolean is_mkdir = file.mkdirs();

if (is_mkdir) {

System.out.println(newPath + "目录创建成功!");

} else {

System.out.println(newPath + "目录创建失败!");

}

boolean delete():删除文件或空目录。

// 要删除的目录

String deletePath = "uploads/dir002/new_uploads";

// 创建 File 类

File file = new File(deletePath);

// 执行删除

boolean isDelete = file.delete();

if (isDelete){

System.out.println("删除成功!");

}else {

System.out.println("删除失败!");

}

boolean deleteOnExit():注册一个文件,使得在Java虚拟机(JVM)退出时自动删除该文件。这个方法常用于临时文件的处理,确保即使在程序异常终止或忘记手动删除的情况下,临时文件也能被自动清除。

// 要删除的目录

String deletePath = "uploads/dir002";

// 创建一个 File 类

File file = new File(deletePath);

// 执行注册删除(没有返回值)

file.deleteOnExit();

文件操作

boolean createNewFile():创建一个新文件。

如果文件不存在,该方法将创建一个新文件,并返回 true;

如果文件已存在,则不创建新文件,并返回 false。

这个方法常用于确保不会覆盖已存在的文件,同时创建新文件。

// 设置要创建的文件的路径

String filePath = "uploads/dir001/file.txt";

// 创建File类

File fileToCreate = new File(filePath);

// 创建新文件

try {

boolean isCreated = fileToCreate.createNewFile();

if (isCreated) {

System.out.println("文件已成功创建: " + filePath);

} else {

System.out.println("文件已存在: " + filePath);

}

} catch (IOException e) {

System.out.println("创建文件时发生错误");

throw new RuntimeException(e);

}

boolean renameTo(File dest):将文件或目录重命名为给定的目标路径。

如果重命名操作成功,则返回 true;

如果操作失败,则返回 false。

这个方法可以用于移动文件或目录,只需将目标路径设置为不同的目录即可。

// 设置要重命名的文件或目录的路径

String oldPath = "uploads/dir001/file.txt";

// 设置新的文件或目录的路径

String newPath = "uploads/dir001/newFile.txt";

// 创建File对象

File oldFile = new File(oldPath);

File newFile = new File(newPath);

// 尝试重命名文件或目录

boolean isRenamed = oldFile.renameTo(newFile);

if (isRenamed) {

System.out.println("文件/目录已成功重命名: " + oldPath + " -> " + newPath);

} else {

System.out.println("重命名文件/目录失败");

}

注意事项

File 类只能操作文件和目录的元数据(如名称、路径、属性),不能用于文件内容的读写。文件内容的读写需要使用输入/输出流(如 FileInputStream、FileOutputStream)。

File 类的方法大部分是独立于平台的,但某些操作(如符号链接的处理)可能受底层文件系统的影响。

File 类的设计早于Java NIO(New I/O),后者提供了更高级的文件I/O操作。

相关数据

365sport 运行内存怎么越来越少如何解决
正规det365登录网站 香蜜沉沉为什么不更了

香蜜沉沉为什么不更了

07-24 访问量: 8729
365sport 网页qq空间怎么进?3步就能打开你的qq空间!