Javaでファイル操作に使用するFileクラスはさまざまな機能があります。
この記事では、ファイル操作で必要な、
- ファイルをコピーする方法
- ファイルを削除する方法
- java.nio.FileChannelクラスを使用してコピーする方法
- ディレクトリをコピーする方法
- ファイルの更新日時を変更する方法
などの基本的な内容から、応用的な使い方に関しても解説していきます。
今回はそんなファイルをコピーする方法について、さまざまな方法をわかりやすく解説します!
この記事の目次
ファイルをコピーする方法
Javaでファイルをコピーする方法はいくつかありますが、ファイル自体を簡単にコピーできるメソッドは存在しません。
ここでは、Java6でファイルをコピーする基本的な方法を2つ解説し、Java7で新しく追加されたファイルのコピー方法についても紹介します。
java.io.Fileクラスを使用してコピーする
ファイルコピーの基本的な方法として、java.io.FileクラスのFileInputStreamクラスと、FileOutputStreamクラスを使用してコピー元のファイルに内容を書き込む方法があります。
FileInputStreamは「import java.io.FileInputStream」、FileOutputStreamは「import java.io.FileOutputStream」のパッケージをインポートします。
以下にJava.io.Fileクラスを使用した、ファイルのコピー方法を記述します。
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class FileClass{ public void fileInOut() throws IOException{ //FileInputStreamのオブジェクトを生成する FileInputStream fileIn = new FileInputStream("/Users/Shared/java/javaIn.txt"); //FileOutputStreamのオブジェクトを生成する FileOutputStream fileOut = new FileOutputStream("/Users/Shared/java/javaOut.txt"); // byte型の配列を宣言 byte[] buf = new byte[256]; int len; // ファイルの終わりまで読み込む while((len = fileIn.read(buf)) != -1){ fileOut.write(buf); } //ファイルに内容を書き込む fileOut.flush(); //ファイルの終了処理 fileOut.close(); fileIn.close(); } }
サンプルでは、FileInputStreamクラスでコピー元のファイルを指定してオブジェクトを生成し、FileOutputStreamクラスでコピー先のファイルを指定してオブジェクトを生成しています。
whileのループでFileInputStreamクラスのreadメソッドで内容を読み込み、FileOutputStreamクラスのwriteメソッドで内容を書き込んでいます。
書き加えられた情報はflushメソッドを使用して、内容を全てファイルに書き込みます。
また、すでにコピー先ファイルが存在する場合は、コピー元ファイルの内容が上書きされます。
java.nio.FileChannelクラスを使用してコピーする
FileChannelクラスのtransferToメソッドを使用することでも、ファイルをコピーすることが可能です。
transferToメソッドは第一引数にコピー開始位置を指定し、第二引数にコピーする最大バイト数を指定します。第三引数には出力先のファイルを指定することで、コピー元ファイルを参照して転送されます。
transferTo(long position, long count, WritableByteChannel target)
FileChannelクラスは「import java.nio.channels.FileChannel」をインポートする必要があります。
以下にFileChannelクラスを使用した、ファイルのコピー方法を記述します。
public class FileClass{ public void fileInOut() throws IOException{ File fileIn = new File("/Users/Shared/java/javaIn.txt"); File fileOut = new File("/Users/Shared/java/javaOut.txt"); // FileChannelクラスのオブジェクトを生成する @SuppressWarnings("resource") FileChannel inCh = new FileInputStream(fileIn).getChannel(); @SuppressWarnings("resource") FileChannel outCh = new FileOutputStream(fileOut).getChannel(); //transferToメソッドを使用してファイルをコピーする inCh.transferTo(0, inCh.size(), outCh); } }
サンプルでは、Fileクラスでコピー元とコピー先ファイルを指定して、オブジェクトを生成します。
次にFileChannelクラスからFileInputStreamクラスとFileOutputStreamクラスのgetChannelメソッドを使用して、ファイルに関連付けられたオブジェクトを生成します。
FileChannelクラスのtransferToメソッドを使用して、コピー先ファイルにコピー元ファイルの内容がコピーされます。
java.nio.file.Filesクラスを使用する
Java7では新しく追加されたjava.nio.file.Filesクラスでは、より簡潔にファイルをコピーすることが可能です。
java.nio.file.Filesクラスでのファイルのコピーは、以下の記事で詳しく解説しています!