Java創建新文件

建立檔案是一個非常常見的IO操作。今天我們將研究在Java中創建檔案的不同方法。

Java建立檔案

在Java中有三種常用的方法來建立檔案。讓我們一一來看看。

  1. File.createNewFile()

    java.io.File 類別可用於在 Java 中創建新檔案。當我們初始化 File 物件時,我們提供檔案名稱,然後我們可以調用 createNewFile() 方法來在 Java 中創建新檔案。如果新檔案已創建,File createNewFile() 方法會返回 true,如果檔案已存在則返回 false。當無法創建檔案時,此方法也會拋出 java.io.IOException。創建的檔案是空的,大小為零字節。當我們通過傳遞檔案名稱創建 File 物件時,可以使用 絕對路徑,或者我們只提供檔案名稱,或者我們提供相對路徑。對於非絕對路徑,File 物件試圖在專案根目錄中定位檔案。如果我們從命令行運行程式,對於非絕對路徑,File 物件會嘗試從當前目錄定位檔案。在創建檔案路徑時,我們應該使用系統屬性 file.separator 來使我們的程式平台獨立。讓我們通過一個簡單的 Java 程式來查看不同的情景,以創建新的檔案。

    package com.journaldev.files;
    
    import java.io.File;
    import java.io.IOException;
    
    public class CreateNewFile {
    
        /**
         * 這個類別展示了如何在 Java 中創建檔案
         * @param args
         * @throws IOException 
         */
        public static void main(String[] args) throws IOException {
            String fileSeparator = System.getProperty("file.separator");
            
            // 帶有路徑的絕對檔案名稱
            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 = new File("file.txt");
            if(file.createNewFile()){
                System.out.println("file.txt 檔案已在專案根目錄中創建");
            }else System.out.println("檔案 file.txt 已在專案根目錄中存在");
            
            // 相對路徑
            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的write方法。下面是一個簡單的代碼片段來展示它的用法。上面討論的絕對路徑和相對路徑的規則在這種情況下也適用。

    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