Java中使用File类创建文件方法总结

 更新时间:2025年05月22日 10:05:45   作者:棐木  
Java File类是I/O操作基础,用于表示文件路径,提供构造方法、文件创建、信息获取(如名称、路径、大小)及目录操作,这篇文章主要介绍了Java中使用File类创建文件方法的相关资料,需要的朋友可以参考下

Java 中的 File 类

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

一、文件(File)

定义

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

二、File 类的介绍

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

  • 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() 的作用

  • 功能

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

File file = new File("example.txt");
boolean isCreated = file.createNewFile(); // 返回 true 表示创建成功
  • 注意事项:
  • 需要处理 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 获取文件相关信息的常用方法

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

总结 

到此这篇关于Java中使用File类创建文件方法的文章就介绍到这了,更多相关Java用File类创建文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java Zookeeper分布式分片算法超详细讲解流程

    Java Zookeeper分布式分片算法超详细讲解流程

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等
    2023-03-03
  • ShardingSphere JDBC强制路由使用的项目实践

    ShardingSphere JDBC强制路由使用的项目实践

    在某些特定场景下,可能需要绕过分片规则直接定位到特定的数据库或表,这种情况下就可以使用HintRouting,本文就来介绍一下ShardingSphere JDBC强制路由使用的项目实践,感兴趣的可以了解一下
    2024-06-06
  • MyBatis一对一映射初识教程

    MyBatis一对一映射初识教程

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。在我们生活中一对一的例子很多见,下面通过本文给大家带来了mybatis一对一映射初识教程,感兴趣的朋友一起看下吧
    2016-08-08
  • Springboot整合Mybatis和SQLite的详细过程

    Springboot整合Mybatis和SQLite的详细过程

    这篇文章主要介绍了Springboot整合Mybatis和SQLite的详细过程,本文通过图文示例相结合给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • 使用Maven将springboot工程打包成docker镜像

    使用Maven将springboot工程打包成docker镜像

    这篇文章主要介绍了使用Maven将springboot工程打包成docker镜像,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring事务处理Transactional,锁同步和并发线程

    Spring事务处理Transactional,锁同步和并发线程

    本文详细讲解了Spring事务处理Transactional,锁同步和并发线程。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • 详解Java Web如何限制访问的IP的两种方法

    详解Java Web如何限制访问的IP的两种方法

    这篇文章主要介绍了详解Java Web如何限制访问的IP的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • java实现统计字符串中大写字母,小写字母及数字出现次数的方法示例

    java实现统计字符串中大写字母,小写字母及数字出现次数的方法示例

    这篇文章主要介绍了java实现统计字符串中大写字母,小写字母及数字出现次数的方法,涉及java针对字符串的遍历、判断、运算相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • Java实现插入排序

    Java实现插入排序

    这篇文章主要介绍了Java实现插入排序,把一列数组按从小到大或从大到小排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Spring-IOC容器-Bean管理-基于XML方式超详解

    Spring-IOC容器-Bean管理-基于XML方式超详解

    这篇文章主要介绍了Spring为IOC容器Bean的管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-08-08

最新评论