ファイルの作成は非常に一般的な入出力操作です。今日は、Javaでファイルを作成するためのさまざまな方法について見ていきましょう。
Javaファイルの作成
Javaでファイルを作成するための人気のある3つの方法があります。それぞれを順番に見ていきましょう。
-
File.createNewFile()
java.io.File
クラスは、Javaで新しいファイルを作成するために使用できます。Fileオブジェクトを初期化する際に、ファイル名を指定し、createNewFile()
メソッドを呼び出すことで、新しいファイルを作成できます。FilecreateNewFile()
メソッドは、新しいファイルが作成された場合はtrue
を返し、既にファイルが存在する場合はfalse
を返します。このメソッドは、ファイルの作成に失敗した場合にはjava.io.IOExceptionをスローします。作成されるファイルは空であり、サイズはゼロバイトです。ファイル名を指定してFileオブジェクトを作成する際には、絶対パスを使用することも、ファイル名のみを指定することも、相対パスを指定することもできます。絶対パスを使用しない場合、Fileオブジェクトはプロジェクトのルートディレクトリからファイルを検索しようとします。コマンドラインからプログラムを実行する場合、絶対パスを使用しない場合、Fileオブジェクトは現在のディレクトリからファイルを検索しようとします。ファイルパスを作成する際には、プログラムをプラットフォームに依存しないようにするために、Systemプロパティfile.separator
を使用する必要があります。単純な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"); //絶対パスでのファイル名 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
ディレクトリがプロジェクトのルートフォルダに存在しないためです。したがって、プロジェクトのルートに「tmp」ディレクトリを作成してプログラムを再度実行しました。以下は出力です。ファイル /Users/pankaj/file.txt は既に存在します ファイル file.txt は既にプロジェクトのルートディレクトリに存在します tmp/file.txt ファイルがプロジェクトのルートディレクトリに作成されました
最初の2つのファイルは既に存在しているため、
createNewFile()
はfalse
を返し、3つ目のファイルはtmpディレクトリに作成され、trueを返します。その後の実行では、以下の出力が表示されます。ファイル /Users/pankaj/file.txt は既に存在します ファイル file.txt は既にプロジェクトのルートディレクトリに存在します ファイル tmp/file.txt は既にプロジェクトのルートディレクトリに存在します
同じプログラムをターミナルのクラスディレクトリから実行する場合、以下の出力が表示されます。
//classes出力ディレクトリからの最初の実行 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 //2回目の実行 pankaj:~/CODE/JavaFiles/bin$ java com/journaldev/files/CreateNewFile ファイル /Users/pankaj/file.txt は既に存在します ファイル file.txt はプロジェクトのルートディレクトリに既に存在します tmp/file.txt ファイルがプロジェクトのルートディレクトリに作成されました //3回目以降の実行 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プログラムで新しいファイルを作成する方法について説明しました。
さらに多くのコアJavaの例は、私たちのGitHubリポジトリでご覧いただけます。
Source:
https://www.digitalocean.com/community/tutorials/java-create-new-file