建立檔案是一個非常常見的IO操作。今天我們將研究在Java中創建檔案的不同方法。
Java建立檔案
-
File.createNewFile()
java.io.File
類別可用於在 Java 中創建新檔案。當我們初始化 File 物件時,我們提供檔案名稱,然後我們可以調用createNewFile()
方法來在 Java 中創建新檔案。如果新檔案已創建,FilecreateNewFile()
方法會返回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 已在專案根目錄中存在
-
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程式中創建新檔案的全部內容。
您可以從我們的GitHub儲存庫中查看更多核心Java範例。
Source:
https://www.digitalocean.com/community/tutorials/java-create-new-file