当前位置: 首页 > news >正文

Java 中使用 File 类创建文件

文章目录

  • Java 中的 File 类
    • 一、文件(File)
        • 定义
    • 二、File 类的介绍
        • 1 创建文件对象的相关构造器
        • 2 createNewFile() 的作用
        • 3 获取文件相关信息的常用方法
        • 4 目录的操作和文件的删除

Java 中的 File 类

在 Java 中,文件文件流是处理数据输入/输出的两个核心概念,它们是 Java I/O 操作的基础。

一、文件(File)

定义
  • 文件是操作系统中的存储单元,用于持久化保存数据(如文本、图片、二进制数据等)。
  • 在 Java 中,java.io.File 类(或 Java 7+ 的 java.nio.file.Path)用于表示文件或目录的抽象路径。
  • 文件本身不存储数据,而是通过路径指向磁盘上的具体数据。

二、File 类的介绍

在这里插入图片描述

1 创建文件对象的相关构造器

image-20250201115045518

  • new File(File parent, String child) :将父路径(字符串形式)和子路径拼接成一个完整路径。自动处理路径分隔符(如 Windows 的 \ 或 Linux 的 /)。

    // 示例1:拼接父路径和子文件
    String parentDir = "C:/Users/Test";
    String childFile = "data.txt";
    File file = new File(parentDir, childFile);
    //会在2个目录之间自动加上'/'或'\'
    System.out.println(file.getPath()); // 输出: C:\Users\Test\data.txt
    
    // 示例2:拼接多级目录
    File dir = new File("src", "main/java/com/example");
    System.out.println(dir.getPath()); // 输出: src\main\java\com\example
    
  • new File(String pathname) :直接通过路径名字符串(绝对路径或相对路径)创建 File 对象。路径可以是文件或目录。

    // 示例1:使用绝对路径
    File file1 = new File("C:/Users/Test/example.txt");
    System.out.println(file1.getPath()); 
    // 输出: C:\Users\Test\example.txt
    
    // 示例2:使用相对路径(相对于当前项目根目录)
    File file2 = new File("data/config.json");
    System.out.println(file2.getPath()); 
    // 输出: data\config.json
    
  • new File(File parent, String child) :使用一个已有的 File 对象表示父路径,再拼接子路径。比字符串拼接更灵活,避免路径分隔符错误。

    // 示例1:基于父目录对象创建子文件
    File parentDir = new File("C:/Users/Test");
    File childFile = new File(parentDir, "logs/app.log");
    System.out.println(childFile.getPath()); // 输出: C:\Users\Test\logs\app.log
    
    // 示例2:链式拼接目录
    File baseDir = new File("projects");
    File srcDir = new File(baseDir, "src");
    File mainFile = new File(srcDir, "Main.java");
    System.out.println(mainFile.getPath()); // 输出: projects\src\Main.java
    
  • new File(URI rui) :通过 URI(统一资源标识符) 创建 File 对象。URI 格式需符合 file: 协议(如 file:/C:/test/data.txt)。

    import java.net.URI;
    
    // 示例1:使用URI创建File对象
    try {
        URI uri = new URI("file:/C:/Users/Test/example.txt");
        File file = new File(uri);
        System.out.println(file.getPath()); 
        // 输出: C:\Users\Test\example.txt
    } catch (Exception e) {
        e.printStackTrace();
    }
    
    // 示例2:处理空格和特殊字符
    //URI 中的特殊字符(如空格)需用 %20 表示,构造方法会解码后转换为实际路径。
    URI uri2 = URI.create("file:/C:/My%20Documents/report.pdf");
    File file2 = new File(uri2);
    System.out.println(file2.getPath()); 
    // 输出: C:\My Documents\report.pdf
    

总结对比

构造方法典型使用场景优点
File(String pathname)直接指定完整路径简单直接,适合已知路径
File(String parent, String child)动态拼接父路径和子路径避免手动处理路径分隔符
File(File parent, String child)基于已有的 File 对象构建子路径支持链式操作,路径更安全
File(URI uri)从 URI 格式创建(如编码后的路径)自动处理特殊字符和协议

注意File 对象只是一个路径的抽象:创建 File 类对象,并不会真的在我们电脑上对应的目录下面创建文件,如果需要实际的创建文件需要显式的调用。

  • 构造 File 对象(如 new File("a.txt")不会自动创建物理文件,仅表示路径。
  • 必须通过显式调用 createNewFile() 或其他写入操作(如 FileOutputStream 写入数据)才能实际生成文件。

2 createNewFile() 的作用
  1. 功能

    • 显式创建一个空的文件(仅当文件不存在时)。
    • 如果文件已存在,则返回 false不会覆盖原有内容
  2. 语法

File file = new File("example.txt");
boolean isCreated = file.createNewFile(); // 返回 true 表示创建成功
  1. 注意事项:
  • 需要处理 IOException

    • 如果父目录不存在或没有写入权限,会抛出异常。

    • 必须用 try-catch 包裹或声明 throws

      import java.io.File;
      import java.io.IOException;
      
      public class CreateFileDemo {
          public static void main(String[] args) {
              File file = new File("test.txt");
              try {
                  if (file.createNewFile()) {
                      System.out.println("文件创建成功");
                  } else {
                      System.out.println("文件已存在");
                  }
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }
      
  • 父目录必须存在

    • 如果路径中的父目录不存在,createNewFile() 会失败。

    • 需先调用 file.getParentFile().mkdirs() 创建父目录:

      File file = new File("nonexistent_dir/data.txt");
      //File 对象仅表示路径,不检查文件是否存在!需通过 exists() 方法验证。
      if (!file.getParentFile().exists()) {
          file.getParentFile().mkdirs(); // 创建所有缺失的父目录
      }
      file.createNewFile();
      

3 获取文件相关信息的常用方法
  1. getName()
    • 作用:返回文件或目录的名称(不包含路径)。
    • 示例:路径为C:/test/file.txt时,返回file.txt;若为目录C:/test,返回test
  2. getAbsolutePath()
    • 作用:返回文件或目录的绝对路径字符串。
    • 注意:无论File对象是相对路径还是绝对路径创建,均解析为完整路径。例如,相对路径file.txt可能返回/home/user/file.txt
  3. getParent()
    • 作用:返回父目录的路径(字符串形式)。若无父目录(如根目录或单文件相对路径),则返回null
    • 示例:路径为C:/test/file.txt时,返回C:/test;路径为file.txt时,返回null
  4. length()
    • 作用:返回文件的字节大小。若文件不存在或为目录,通常返回0L
    • 注意:需先通过exists()isFile()验证目标是否为有效文件。
  5. exists()
    • 作用:检查文件或目录是否存在,返回布尔值。
    • 注意:可能受权限限制影响(如无访问权限时返回false)。
  6. isFile()
    • 作用:判断是否为标准文件(非目录或符号链接),返回布尔值。
    • 注意:若路径不存在,返回false
  7. isDirectory()
    • 作用:判断是否为目录,返回布尔值。
    • 注意:若路径不存在,返回false
import java.io.File;
import java.io.IOException;

public class Example {
    public static void main(String[] args) {
        read();
    }
    public static void read() {
        //1.getName()
        //路径指向文件
        File file1 = new File("D:/0.学习/File_Test/read.txt");
        System.out.println(file1.getName());// 输出 read.txt
        //路径为目录
        File file2 = new File("D:/0.学习/File_Test");
        System.out.println(file2.getName());// 输出 File_Test

        //2.getAbsolutePath()
        //以绝对路径创建 File 对象
        File file3 = new File("D:/0.学习/File_Test/read3.txt");
        //输出 D:/0.学习/File_Test/read3.txt
        System.out.println(file3.getAbsolutePath());
        //以相对路径创建 File 对象
        File file4 = new File("read4.txt");
        //输出绝对路径 D:\0.学习\java笔记\java_Code\TankGame\read4.txt
        System.out.println(file4.getAbsolutePath());

        //3.getParent()
        //File file3 = new File("D:/0.学习/File_Test/read3.txt");
        //输出 D:\0.学习\File_Test
        System.out.println(file3.getParent());
        //根目录或单文件相对路径,返回 null
        File file5 = new File("D:");
        System.out.println(file5.getParent());//null

        //4.length()
        File file6 = new File("D:/0.学习/File_Test/read6.txt");
        System.out.println(file6.length());
        try {
            file6.createNewFile();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        System.out.println(file6.length());
    }
}

4 目录的操作和文件的删除

1. mkdir()

  • 作用 :创建单层目录(仅当父目录存在时才能成功)。
  • 返回值boolean:目录创建成功返回 true,失败返回 false
  • 适用场景 :当明确知道父目录已经存在时,直接创建子目录。

2. mkdirs()

  • 作用 :创建多层目录(自动创建路径中所有不存在的父目录)。
  • 返回值boolean:所有目录创建成功返回 true,失败返回 false
  • 适用场景 :不确定父目录是否存在时,直接创建完整路径。

3. delete()

  • 作用 :删除文件或空目录(非空目录无法删除)。
  • 返回值boolean:删除成功返回 true,失败返回 false
  • 适用场景 :删除文件或空目录。
import java.io.File;
import java.io.IOException;

public class Example {
    public static void main(String[] args) {
        dir();
    }
    public static void dir() {
        //1.mkdir() 创建单层目录
        File file1 = new File("D:/0.学习/File_Test/demo1");
        //要求父目录必须存在,否则无法创建成功
        //即,D:/0.学习/File_Test 必须存在才能成功创建 demo1 目录
        boolean mkdir = file1.mkdir();
        if(mkdir) {
            System.out.println("创建成功");
        } else {
            System.out.println("创建失败");
        }

        //2.mkdirs() 创建多层目录
        File file2 = new File("D:/0.学习/File_Test/demo2");
        //如果路径中有不存在的自动创建
        boolean mkdirs = file2.mkdirs();

        //3.delete() 删除文件或空目录(非空目录无法删除)
        //删除 demo2 空目录
        boolean delete = file2.delete();
        File file3 = new File("D:/0.学习/File_Test/demo1/dir.txt");
        try {
            file3.createNewFile();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        //删除 dir.txt 文件
        file3.delete();
    }
}

相关文章:

  • C++笔记-string(下)
  • C++类模板的运用
  • spring功能汇总
  • 动态规划-杨辉三角
  • Python字典实战: 三大管理系统开发指南(班级+会议+购物车)(附源码)
  • git修改已经push的commit的message
  • Spring Boot中Spring MVC相关配置的详细描述及表格总结
  • C4D XP 粒子动画云端渲染指南
  • 控制理论-传递函数
  • 【docker】
  • 前后端 Mock 技术实践指南【大模型总结】
  • 1、window 下SDL 下载使用, 测试环境搭建
  • 位运算题目:N 天后的牢房
  • [数据集]The Natural Scenes Dataset (NSD)介绍,申请及使用方法
  • 【蓝桥杯】算法笔记6
  • CubeMX配置STM32VET6实现网口通信(无操作系统版-附源码)
  • win11 nacos2.2.1 报错curl -X post 报错找不到和名称X匹配参数;不是命令
  • excel经验
  • (三十七)Dart 中使用 Pub 包管理系统与 HTTP 请求教程
  • leetcode0410. 分割数组的最大值-hard
  • 南宁有本地租房做网站吗/外包公司和劳务派遣的区别
  • 温州网站建设方案报价/百度竞价推广点击软件奔奔
  • ubuntu做网站/品牌推广活动有哪些
  • 淄博北京网站建设公司/seo网站结构优化的方法
  • 公司网站方案/seo网站诊断分析报告
  • 做视频网站需要什么软件/seo软件服务