Java中创建新文件的多种方式

后端 潘老师 7个月前 (10-18) 142 ℃ (0) 扫码查看

在Java中创建新文件可以使用不同的技术,包括NIO Path、IO File、OutputStream,以及开源库,如Guava和Apache Commons。还有关于创建临时文件和将文件设置为只读的单独文章。

1.使用Java NIO创建新文件

使用Files.createFile(path, attribs)是在Java中创建新的、空的可写文件的最佳方式,如果您尚未使用它,将来应该成为您的首选方法。

  • createFile()方法接受Path接口而不是File,它检查文件是否已经存在,然后创建文件。
  • 检查现有文件并创建文件是一个原子操作。
  • attribs是一个可选的文件属性列表,用于在创建文件时进行原子设置。
  • 如果同名文件已经存在,它将返回FileAlreadyExistsException
  • 如果发生I/O错误或父目录不存在,它将返回IOException

例子1:创建一个新的可写文件。

String TEXT_FILE = "C:/temp/io/textFile.txt";
Path textFilePath = Paths.get(TEXT_FILE);
Files.createFile(textFilePath);

例子2:创建一个新的只读文件。

String TEXT_FILE = "C:/temp/io/textFile.txt";
Set<PosixFilePermission> permissions = PosixFilePermissions
  .fromString("r--r--r--");
FileAttribute<Set<PosixFilePermission>> attribs = PosixFilePermissions
  .asFileAttribute(permissions);
Path textFilePath = Paths.get(TEXT_FILE);
Files.createFile(textFilePath, attribs);

还可以在创建文件时设置文件属性。在给定的示例中,我们使用字符串“r–r–r–”为所有者、组和其他用户设置只读(“r”)访问权限。

2.使用File.createNewFile()

使用File.createNewFile()方法可以创建新文件,前提是该文件名尚不存在。检查现有文件并创建文件是一个原子操作。

此方法返回一个布尔值:

  • 如果文件成功创建,返回true
  • 如果文件已经存在,返回false
  • 如果发生I/O错误,将抛出IOException
String TEXT_FILE = "C:/temp/io/textFile.txt";
File textFile = new File(TEXT_FILE);
boolean isFileCreated = textFile.createNewFile();

3.使用FileOutputStream

构造函数会自动在指定位置创建一个新文件。请注意,如果具有相同名称的文件已经存在,它将被覆盖。

如果给定的文件路径表示一个目录,或者由于任何原因无法创建新文件,它将抛出FileNotFoundException

String TEXT_FILE = "C:/temp/io/textFile.txt";
try(FileOutputStream fos = new FileOutputStream(TEXT_FILE)){
  // We can write data as byte[]
  // fos.write(data, 0, data.length);
}

4.Guava的Files.touch()

要使用Guava,需要将以下内容添加到pom.xml中。

pom.xml<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.1-jre</version>
</dependency>

Files.touch()方法类似于Unix的touch命令。它创建一个空文件或更新最后更新的时间戳。

当不带任何选项使用touch命令时,它假定文件不存在时创建一个空文件。如果文件已存在,则更改时间戳。

String TEXT_FILE = "C:/temp/io/textFile.txt";
com.google.common.io.Files.touch(new File(TEXT_FILE));

5.Apache Commons IO的FileUtils.touch()

要使用Apache Commons IO,需要将以下内容添加到pom.xml中。

pom.xml<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

FileUtils.touch()与前面的示例非常相似。它也实现了Unix上“touch”实用程序的相同行为。

此方法还会在v1.3版本后创建父目录(如果不存在)。如果文件的最后修改日期无法设置,它将抛出IOException

String TEXT_FILE = "C:/temp/io/textFile.txt";
org.apache.commons.io.FileUtils.touch(new File(TEXT_FILE));

版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/back/9843.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】