Java创建新文件

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

Java创建文件

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

  1. 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 已在项目根目录中存在
    
  2. FileOutputStream.write(byte[] b)

    如果您想创建一个新文件并同时向其中写入一些数据,您可以使用FileOutputStream的写入方法。以下是一个简单的代码片段来展示它的用法。上面讨论的绝对路径和相对路径的规则在这种情况下也适用。

    String fileData = "Pankaj Kumar";
    FileOutputStream fos = new FileOutputStream("name.txt");
    fos.write(fileData.getBytes());
    fos.flush();
    fos.close();
    
  3. 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