程序员社区

Java IO教程 --- Java创建文件

创建文件是一个非常常见的IO操作。今天我们将研究在java中创建文件的不同方法。

Java创建文件

在java中创建文件有三种流行的方法。让我们一一看看它们。

File.createNewFile()

java.io.File类可用于在 Java 中创建一个新文件。当我们初始化 File 对象时,我们提供文件名,然后我们可以调用createNewFile()方法在 Java 中创建新文件。

如果创建了新文件并且文件已经存在,则FilecreateNewFile()方法返回。此方法在无法创建文件时也会抛出java.io.IOException。创建的文件为空且字节数为零。truefalse

当我们通过传递文件名创建 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程序中创建一个新文件的全部内容。

赞(0) 打赏
未经允许不得转载:IDEA激活码 » Java IO教程 --- Java创建文件

一个分享Java & Python知识的社区