Java 创建新文件
创建文件是一种非常常见的 IO 操作。今天我们将研究在 Java 中创建文件的不同方法。
Java 创建文件
在 Java 中有三种常用的创建文件的方法。让我们一一看一下。
-
文件.createNewFile()
java.io.File
类可用于在 Java 中创建一个新文件。初始化 File 对象时,我们提供文件名,然后我们可以调用createNewFile()
方法在 Java 中创建新文件。如果新文件已创建并且文件已存在, FilecreateNewFile()
方法将返回该值。当无法创建文件时,此方法还会抛出java.io.IOException 。创建的文件为空且为零字节。当我们通过传递文件名来创建 File 对象时,它可以是绝对路径,或者我们可以只提供文件名,或者我们可以提供相对路径。对于非绝对路径,File 对象会尝试在项目根目录中定位文件。如果我们从命令行运行程序,对于非绝对路径,File 对象会尝试从当前目录中定位文件。在创建文件路径时,我们应该使用 System 属性使我们的程序独立于平台。让我们使用一个简单的 Java 程序来看一下在 Java 中创建新文件的不同场景。true
false
file.separator
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+" File Created"); }else System.out.println("File "+absoluteFilePath+" already exists"); //file name only file = new File("file.txt"); if(file.createNewFile()){ System.out.println("file.txt File Created in Project root directory"); }else System.out.println("File file.txt already exists in the project root directory"); //relative path String relativePath = "tmp"+fileSeparator+"file.txt"; file = new File(relativePath); if(file.createNewFile()){ System.out.println(relativePath+" File Created in Project root directory"); }else System.out.println("File "+relativePath+" already exists in the project root directory"); } }
当我们第一次从 Eclipse IDE 执行上述程序时,会产生以下输出。
/Users/pankaj/file.txt File Created file.txt File Created in Project root directory 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”目录并再次执行了该程序,这是输出。File /Users/pankaj/file.txt already exists File file.txt already exists in the project root directory tmp/file.txt File Created in Project root directory
前两个文件已经存在,因此
createNewFile()
返回false
,第三个文件在 tmp 目录中创建并返回true。任何后续执行都会产生以下输出:File /Users/pankaj/file.txt already exists File file.txt already exists in the project root directory File tmp/file.txt already exists in the project root directory
如果您从终端类目录运行相同的程序,这里是输出。
//first execution from classes output directory pankaj:~/CODE/JavaFiles/bin$ java com/journaldev/files/CreateNewFile File /Users/pankaj/file.txt already exists file.txt File Created in Project root directory 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 directory doesn't exist, let's create it pankaj:~/CODE/JavaFiles/bin$ mkdir tmp //second time execution pankaj:~/CODE/JavaFiles/bin$ java com/journaldev/files/CreateNewFile File /Users/pankaj/file.txt already exists File file.txt already exists in the project root directory tmp/file.txt File Created in Project root directory //third and subsequent execution pankaj:~/CODE/JavaFiles/bin$ java com/journaldev/files/CreateNewFile File /Users/pankaj/file.txt already exists File file.txt already exists in project root directory File tmp/file.txt already exists in project root directory
-
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 文件.write()
我们可以使用Java NIO Files类来创建一个新文件并向其中写入一些数据。这是一个不错的选择,因为我们不必担心关闭 IO 资源。
String fileData = "Pankaj Kumar"; Files.write(Paths.get("name.txt"), fileData.getBytes());
这就是在 java 程序中创建新文件的全部内容。
您可以从我们的GitHub 存储库中查看更多核心 Java 示例。