创建文件

2025/04/06

1. 概述

在这个快速教程中,我们将学习如何在Java中创建一个新文件-首先使用NIO的Files和Path类,然后使用Java File和FileOutputStream类,Google Guava,最后使用Apache Commons IO库。

2. 设置

在示例中,我们将为文件名定义一个常量:

private final String FILE_NAME = "src/test/resources/fileToCreate.txt";

我们还将添加一个清理步骤,以确保该文件在每次测试之前不存在,并在每次测试运行后将其删除:

@AfterEach
@BeforeEach
public void cleanUpFiles() {
    File targetFile = new File(FILE_NAME);
    targetFile.delete();
}

3. 使用NIO Files.createFile()

让我们首先使用Java NIO包中的Files.createFile()方法:

@Test
public void givenUsingNio_whenCreatingFile_thenCorrect() throws IOException {
    Path newFilePath = Paths.get(FILE_NAME);
    Files.createFile(newFilePath);
}

如你所见,代码仍然非常简单;我们现在使用新的Path接口而不是旧的File。

这里需要注意的一点是,新API充分利用了异常。如果文件已经存在,我们不再需要检查返回码。相反,我们会得到一个FileAlreadyExistsException:

java.nio.file.FileAlreadyExistsException: <code class="language-java">src/test/resources/fileToCreate.txt在 sun.nfWindowsException.translateToIOException (WindowsException.java:81)

4. 使用File.createNewFile()

现在让我们看看如何使用java.io.File类来做同样的事情:

@Test
public void givenUsingFile_whenCreatingFile_thenCorrect() throws IOException {
    File newFile = new File(FILE_NAME);
    boolean success = newFile.createNewFile();
    assertTrue(success);
}

请注意,该文件必须不存在才能使此操作成功。如果文件存在,则createNewFile()操作将返回false。

5. 使用FileOutputStream

创建新文件的另一种方法是使用java.io.FileOutputStream:

@Test
public void givenUsingFileOutputStream_whenCreatingFile_thenCorrect() throws IOException {
    try(FileOutputStream fileOutputStream = new FileOutputStream(FILE_NAME)){
    }
}

在这种情况下,当我们实例化FileOutputStream对象时会创建一个新文件。如果给定名称的文件已经存在,则会覆盖该文件。但是,如果现有文件是一个目录或由于任何原因无法创建新文件,那么我们将得到FileNotFoundException。

此外,请注意我们使用了try-with-resources语句以确保流已正确关闭。

6. 使用Guava

Guava创建新文件的解决方案同样也很简单:

@Test
public void givenUsingGuava_whenCreatingFile_thenCorrect() throws IOException {
    com.google.common.io.Files.touch(new File(FILE_NAME));
}

7. 使用Apache Commons IO

Apache Commons库提供了FileUtils.touch()方法,它实现了与Linux中的”touch”实用程序相同的行为

因此,它会在文件系统中创建一个新的空文件甚至一个文件及其完整路径:

@Test
public void givenUsingCommonsIo_whenCreatingFile_thenCorrect() throws IOException {
    FileUtils.touch(new File(FILE_NAME));
}

请注意,这与前面的示例略有不同:如果文件已经存在,操作不会失败,它只是不会执行任何操作。

以上就是在Java中创建新文件的4种快速方法。

8. 总结

在本文中,我们研究了用Java创建文件的不同解决方案,我们使用了属于JDK和外部库的类。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章