Java中的File

认识File

在Java中,File 类是 java.io 包下的一个重要类,它代表了文件和目录路径名的抽象表示形式。File 类可以被用来创建、删除文件,重命名文件,查询文件属性,以及遍历目录树等。但是,值得注意的是,File 类本身并不直接处理文件的读写操作,它仅仅是一个路径名(文件名或目录名)的封装。文件的读写操作需要通过其他流(如 FileInputStream、FileOutputStream、FileReader、FileWriter 等)来完成。

File类的常用构造方法(创建File类的对象)

  • File(String pathname):根据给定的路径名字符串创建新的 File 实例。
  • File(String parent, String child):根据父路径名字符串和子路径名字符串创建新的 File 实例。
  • File(File parent, String child):根据 File 对象表示的父路径名和子路径名字符串创建新的 File 实例。

File常见方法

exists()

  • 功能:判断当前文件对象对应的文件路径是否存在。

  • 返回值 :如果存在,返回true;否则返回false。

  • 示例代码:

    File file = new File("example.txt");
    boolean fileExists = file.exists();
    if (fileExists) {
    System.out.println("文件存在");
    } else {
    System.out.println("文件不存在");
    }

isFile()

  • 功能:判断当前文件对象指代的是否是文件(而非目录)。

  • 返回值 :如果是文件,返回true;否则返回false。

  • 示例代码:

    File file = new File("example.txt");
    boolean isFile = file.isFile();
    if (isFile) {
    System.out.println("这是一个文件");
    } else {
    System.out.println("这不是一个文件");
    }

isDirectory()

  • 功能:判断当前文件对象指代的是否是目录(文件夹)。

  • 返回值 :如果是目录,返回true;否则返回false。

  • 示例代码:

    File dir = new File("docs");
    boolean isDirectory = dir.isDirectory();
    if (isDirectory) {
    System.out.println("这是一个目录");
    } else {
    System.out.println("这不是一个目录");
    }

getPath()

  • 功能:获取创建文件对象时使用的路径。这通常是文件的相对路径,或者如果是用绝对路径创建的,则返回绝对路径。

  • 返回值:文件的路径(String类型)。

  • 示例代码:

    File file = new File("/home/user/example.txt");
    String filePath = file.getPath();
    System.out.println("文件路径: " + filePath);

getName()

  • 功能:获取文件的名称(包含后缀)。

  • 返回值:文件的名称(String类型)。

  • 示例代码:

    File file = new File("/home/user/example.txt");
    String fileName = file.getName();
    System.out.println("文件名: " + fileName);

length()

  • 功能:获取文件的大小,返回字节个数。

  • 返回值:文件大小(long类型)。

  • 示例代码:

    File file = new File("example.txt");
    long fileSize = file.length();
    System.out.println("文件大小: " + fileSize + " 字节");

lastModified()

  • 功能:获取文件的最后修改时间。

  • 返回值:最后修改时间(自1970年1月1日00:00:00 GMT以来的毫秒数,long类型)。

  • 示例代码:

    File file = new File("example.txt");
    long lastModifiedTime = file.lastModified();
    System.out.println("最后修改时间: " + new Date(lastModifiedTime));

getAbsolutePath()

  • 功能:获取文件的绝对路径。

  • 返回值:文件的绝对路径(String类型)。

  • 示例代码:

    File file = new File("example.txt");
    String absolutePath = file.getAbsolutePath();
    System.out.println("绝对路径: " + absolutePath);

File类创建与删除文件的功能

1. createNewFile()

  • 功能:创建一个新的空文件,当且仅当不存在具有此抽象路径名指定名称的文件时。

  • 返回值 :如果文件被成功创建,则返回 true;如果文件已经存在,则返回 false。

  • 示例代码:

    File file = new File("newFile.txt");
    boolean isCreated = file.createNewFile();
    if (isCreated) {
    System.out.println("文件创建成功");
    } else {
    System.out.println("文件已存在");
    }

2. mkdir()

  • 功能:创建由此抽象路径名指定的目录。

  • 返回值 :如果目录被成功创建,则返回 true;如果目录已经存在,或者由于某种原因目录不能被创建,则返回 false。

  • 注意:只能创建一级目录。

  • 示例代码:

    File dir = new File("newDir");
    boolean isCreated = dir.mkdir();
    if (isCreated) {
    System.out.println("目录创建成功");
    } else {
    System.out.println("目录已存在或创建失败");
    }

3. mkdirs()

  • 功能:创建由此抽象路径名指定的目录,包括所有必需但不存在的父目录。

  • 返回值 :如果目录被成功创建,则返回 true;如果目录已经存在,或者由于某种原因目录不能被创建,则返回 false。

  • 示例代码:

    File dirs = new File("parentDir/childDir");
    boolean isCreated = dirs.mkdirs();
    if (isCreated) {
    System.out.println("多级目录创建成功");
    } else {
    System.out.println("目录已存在或创建失败");
    }

4. delete()

  • 功能:删除由此抽象路径名表示的文件或目录。

  • 返回值 :如果删除成功,则返回 true;如果删除失败,则返回 false。

  • 注意:默认只能删除文件和空目录。

  • 示例代码:

    File fileToDelete = new File("newFile.txt");
    boolean isDeleted = fileToDelete.delete();
    if (isDeleted) {
    System.out.println("文件删除成功");
    } else {
    System.out.println("文件删除失败");
    }

文件夹的遍历

list() 方法

list()方法用于获取当前目录下所有的"一级文件名称",并将这些名称作为字符串数组返回。如果目录为空,则返回一个长度为0的数组。如果目录不存在或发生I/O错误,则返回null。

示例代码:

复制代码
import java.io.File;  
  
public class FileExample {  
    public static void main(String[] args) {  
        File directory = new File("/path/to/your/directory");  
          
        // 获取当前目录下所有文件和文件夹的名称  
        String[] fileNames = directory.list();  
          
        if (fileNames != null) {  
            for (String fileName : fileNames) {  
                System.out.println(fileName);  
            }  
        } else {  
            System.out.println("Directory does not exist or an I/O error occurred.");  
        }  
    }  
}
listFiles() 方法

listFiles()方法用于获取当前目录下所有"一级文件对象"到一个文件对象数组中去返回。与list()方法不同,listFiles()返回的是File对象,而不是字符串名称。这允许你进一步操作这些文件或文件夹,如读取、写入、删除等。

复制代码
import java.io.File;  
  
public class FileExample {  
    public static void main(String[] args) {  
        File directory = new File("/path/to/your/directory");  
          
        // 获取当前目录下所有文件和文件夹的File对象  
        File[] files = directory.listFiles();  
          
        if (files != null) {  
            for (File file : files) {  
                // 这里可以进一步操作file对象,比如打印文件路径  
                System.out.println(file.getPath());  
                  
                // 检查是文件还是文件夹  
                if (file.isDirectory()) {  
                    System.out.println(file.getName() + " is a directory.");  
                } else {  
                    System.out.println(file.getName() + " is a file.");  
                }  
            }  
        } else {  
            System.out.println("Directory does not exist or an I/O error occurred.");  
        }  
    }  
}

注意事项

  • 当listFiles()方法的主调对象不是一个目录,或者路径不存在时,它会返回null。
  • 当主调对象是一个空目录时,listFiles()会返回一个长度为0的数组。
  • listFiles()会返回目录中的所有一级文件和文件夹,包括隐藏文件(如果操作系统允许访问它们)。
  • 如果没有权限访问某个目录,listFiles()同样会返回null。
相关推荐
十年Java程序媛4 分钟前
JVM 基础与 GC 垃圾回收详解|可达性分析、分代模型、垃圾收集器、STW
java·开发语言·jvm·spring boot·后端·面试
估值探索者5 分钟前
【Python量化选股流水线 #03】候选股怎么排序?动量+低波+流动性三因子打分取 Top-N
开发语言·python·接口·api接口·股票数据接口·数据接口·股票数据api接口
骑士雄师6 分钟前
supervisor 中关于上下文多轮信息维护常用到的python语法
开发语言·python
曹牧15 分钟前
C#:字符串占位符与值数量不一致
开发语言·数据库·c#
2301_322414280417 分钟前
基于SSM框架的在线考试管理系统的设计与实现14750-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·redis·mysql·tomcat·maven·mybatis·ssm
clz131452123 分钟前
RuoYi-Cloud 新建微服务并实现服务间调用(OpenFeign 实战)
java·ruoyi
迅猛龙办公室23 分钟前
Python函数实现反转一个只有3位数的整数
开发语言·前端·python
“AI国潮设计-小江”26 分钟前
《【AIGC实战】Python+SDXL批量生成“英歌舞树莓香草布丁”IP,附保持角色一致性的代码逻辑》
开发语言·人工智能·python·prompt·aigc
const_qiu26 分钟前
第四章 06:4.6 统一入口 —— analyze() 能力收束
java·人工智能
闻缺陷则喜何志丹32 分钟前
【C++特性及类库】多线程
开发语言·c++·多线程·语言特性·系统库