创建文件是一个非常常见的IO操作。今天我们将研究在java中创建文件的不同方法。
Java创建文件
在java中创建文件有三种流行的方法。让我们一一看看它们。
File.createNewFile()
java.io.File
类可用于在 Java 中创建一个新文件。当我们初始化 File 对象时,我们提供文件名,然后我们可以调用createNewFile()
方法在 Java 中创建新文件。
如果创建了新文件并且文件已经存在,则FilecreateNewFile()
方法返回。此方法在无法创建文件时也会抛出java.io.IOException。创建的文件为空且字节数为零。true
false
当我们通过传递文件名创建 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+" 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 write 方法。下面是一个简单的代码片段来展示它的用法。上面讨论的绝对路径和相对路径的规则也适用于这种情况。
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程序中创建一个新文件的全部内容。