创建文件是一种非常常见的IO操作。 今天我们将研究在java中创建文件的不同方法。
Java创建文件
在java中有三种流行的方法来创建文件。 让我们依次看看它们。
-
File.createNewFile()
java.io.File
类可用于在Java中创建新文件。当我们初始化File对象时,提供文件名,然后可以调用createNewFile()
方法来创建新文件。如果成功创建新文件,createNewFile()
方法将返回true
,如果文件已存在,则返回false
。该方法在无法创建文件时还会抛出java.io.IOException异常。所创建的文件为空且大小为零字节。当通过传递文件名创建File对象时,可以使用绝对路径,也可以仅提供文件名,或者提供相对路径。对于非绝对路径,File对象尝试在项目根目录中定位文件。如果从命令行运行程序,对于非绝对路径,File对象将尝试从当前目录中定位文件。在创建文件路径时,应使用System属性file.separator
使程序具有跨平台性。让我们通过一个简单的Java程序看看在Java中创建新文件的不同场景。package com.journaldev.files; import java.io.File; import java.io.IOException; public class CreateNewFile { /** * This class shows how to create a File in Java * @param args * @throws IOException */ public static void main(String[] args) throws IOException { String fileSeparator = System.getProperty("file.separator"); //absolute file name with path String absoluteFilePath = fileSeparator+"Users"+fileSeparator+"pankaj"+fileSeparator+"file.txt"; File file = new File(absoluteFilePath); if(file.createNewFile()){ System.out.println(absoluteFilePath+" 文件已创建"); }else System.out.println("文件 "+absoluteFilePath+" 已存在"); //file name only file = new File("file.txt"); if(file.createNewFile()){ System.out.println("file.txt 文件已在项目根目录中创建"); }else System.out.println("文件 file.txt 已在项目根目录中存在"); //relative path String relativePath = "tmp"+fileSeparator+"file.txt"; file = new File(relativePath); if(file.createNewFile()){ System.out.println(relativePath+" 文件已在项目根目录中创建"); }else System.out.println("文件 "+relativePath+" 已在项目根目录中存在"); } }
当我们首次从Eclipse IDE执行上述程序时,产生以下输出。
/Users/pankaj/file.txt 文件已创建 file.txt 文件已在项目根目录中创建 Exception in thread "main" java.io.IOException: No such file or directory at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.createNewFile(File.java:947) at com.journaldev.files.CreateNewFile.main(CreateNewFile.java:32)
对于相对路径,它抛出IOException,因为
tmp
目录不存在于项目根文件夹中。因此,很明显createNewFile()
只是尝试创建文件,绝对或相对路径的任何目录都应该已经存在,否则会抛出IOException
。因此,我在项目根目录中创建了“tmp”目录,然后再次执行程序,以下是输出。文件 /Users/pankaj/file.txt 已存在 文件 file.txt 已在项目根目录中存在 tmp/file.txt 文件已在项目根目录中创建
前两个文件已经存在,因此
createNewFile()
返回false
,第三个文件在tmp目录中创建并返回true。任何后续执行都会产生以下输出:文件 /Users/pankaj/file.txt 已存在 文件 file.txt 已在项目根目录中存在 文件 tmp/file.txt 已在项目根目录中存在
如果从终端类目录运行相同的程序,以下是输出。
//从类的输出目录第一次执行 pankaj:~/CODE/JavaFiles/bin$ java com/journaldev/files/CreateNewFile 文件 /Users/pankaj/file.txt 已存在 file.txt 文件已在项目根目录中创建 Exception in thread "main" java.io.IOException: No such file or directory at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.createNewFile(File.java:947) at com.journaldev.files.CreateNewFile.main(CreateNewFile.java:32) //tmp目录不存在,让我们创建它 pankaj:~/CODE/JavaFiles/bin$ mkdir tmp //第二次执行 pankaj:~/CODE/JavaFiles/bin$ java com/journaldev/files/CreateNewFile 文件 /Users/pankaj/file.txt 已存在 文件 file.txt 已在项目根目录中存在 tmp/file.txt 文件已在项目根目录中创建 //第三次及后续执行 pankaj:~/CODE/JavaFiles/bin$ java com/journaldev/files/CreateNewFile 文件 /Users/pankaj/file.txt 已存在 文件 file.txt 已在项目根目录中存在 文件 tmp/file.txt 已在项目根目录中存在
-
FileOutputStream.write(byte[] b)
如果您想创建一个新文件并同时向其中写入一些数据,您可以使用FileOutputStream的写入方法。以下是一个简单的代码片段来展示它的用法。上面讨论的绝对路径和相对路径的规则在这种情况下也适用。
String fileData = "Pankaj Kumar"; FileOutputStream fos = new FileOutputStream("name.txt"); fos.write(fileData.getBytes()); fos.flush(); fos.close();
-
Java NIO Files.write()
我们可以使用Java NIO Files类来创建一个新文件,并向其中写入一些数据。这是一个不错的选择,因为我们不必担心关闭IO资源。
String fileData = "Pankaj Kumar"; Files.write(Paths.get("name.txt"), fileData.getBytes());
这就是在java程序中创建新文件的全部内容。
您可以从我们的GitHub仓库中查看更多的核心java示例。
Source:
https://www.digitalocean.com/community/tutorials/java-create-new-file