如果文件不存在,使用Java 7的清洁方法创建文件

13

如何在Java 7或Java 8中创建文件(如果不存在)?


1
据我所知,Java 8不会改变我们处理文件的方式。 - Nir Alfasi
2
@alfasin Java 7(因此Java 8也是如此)通过java.nio.file对其进行了巨大改变;但今天,不幸的是,它仍然被低估。 - fge
@fge 很正确。我会将其删除。 - Biffen
可能是重复问题,参考如何在Java中仅在文件不存在时创建文件? - Joe
@Joe 就像我在早先的评论中所说的那样,这个问题并没有提供任何和java.nio.file有关的解决方案。这是2015年!此外,这个问题明确提到了Java 7+。 - fge
为什么要这样做?通常你不只是创建文件,而是要向它们写入内容,在这种情况下,你只需要使用 new FileOutputStream(...) 或其他类似的方法。要求一个Java 7或8的解决方案需要有动机。 - user207421
2个回答

27

我不确定您想要什么,但是举个例子:

try {
    Files.createFile(thePath);
} catch (FileAlreadyExistsException ignored) {
}

还有其他解决方案;例如:

if (!Files.exists(thePath, LinkOption.NOFOLLOW_LINKS))
    Files.createFile(thePath);

请注意,与File不同的是,如果文件创建失败,这些方法将抛出异常!这些异常还非常相关(例如AccessDeniedExceptionReadOnlyFileSystemException等等)

有关更多信息,请参见此处。 还可以参见为什么应该尽快迁移到java.nio.file


那么没有一行代码可以做到这一点吗? - emotionull
2
不过,这真的重要吗? ;) 如果您想要,您可以创建自己的实用方法,这并不是真正的问题。 - fge
2
尝试 { Files.createFile(thePath); } 捕获(FileAlreadyExistsException ignored){} - mac01021

1

你可以做

File f = new File("pathToYourFile");
if(!f.exists() && !f.isDirectory())
{
    f.createNewFile()
}

如果你想使用NIO.2,可以使用Files类中的方法。

boolean exists(Path path,LinkOption. . . options)
Path createTempFile(Path dir, String prefix,String suffix, FileAttribute<?>. . . attrs)
createFile(Path path, FileAttribute<?>... attrs)

正如fge在评论中提到的那样,createNewFile()方法返回一个布尔值,表示文件是否实际创建。不幸的是,我们无法知道为什么它失败了。事实上,这就是引入NIO.2 I/O API的原因之一。

1
还有...你没有检查.createNewFile()的结果! - fge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接