【Java入門】Fileのコピー方法まとめ

Javaでファイル操作に使用するFileクラスはさまざまな機能があります。

この記事では、ファイル操作で必要な、

  • ファイルをコピーする方法
  • ファイルを削除する方法
  • java.nio.FileChannelクラスを使用してコピーする方法
  • ディレクトリをコピーする方法
  • ファイルの更新日時を変更する方法

などの基本的な内容から、応用的な使い方に関しても解説していきます。

今回はそんなファイルをコピーする方法について、さまざまな方法をわかりやすく解説します!

なお、Javaの記事については、こちらにまとめています。

目次

ファイルをコピーする方法

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クラスでのファイルのコピーは、以下の記事で詳しく解説しています!

ファイルを削除する方法

ファイルを削除するためには、Fileクラスのdeleteメソッドを使用します。

ファイルを削除する方法については、以下の記事で詳しく解説しています!


【Java入門】Fileの削除(delete、強制削除、拡張子の指定)
更新日:2024年3月1日

ディレクトリをコピーする方法

ディレクトリのコピーは、Java標準の「JDK」では専用のメソッドが用意されていないため、「commons-io」パッケージをインストールする必要があります。

ディレクトリのコピーは、「commons-io」パッケージのFileUtilsクラスを使用する必要があるため、「import org.apache.commons.io.FileUtils」をインポートします。

「commons-io」のパッケージは、Apache Commonsの以下のサイトからダウンロードできます。
https://commons.apache.org/proper/commons-io/download_io.cgi

以下にcommons-ioを使用した、ディレクトリのコピー方法を記述します。

public class FileClass{
    public void fileInOut() throws IOException{
 
        File DirIn  = new File("/Users/Shared/java1");
        File DirOut = new File("/Users/Shared/java2");
   	 
        //copyDirectoryメソッドを使用してディレクトリをコピーする
        FileUtils.copyDirectory(DirIn, DirOut);
    }
}

サンプルでは、Fileクラスでコピー元とコピー先ファイルを指定して、オブジェクトを生成します。

FileUtilsクラスのcopyDirectoryメソッドを使用して、第一引数にコピー元ディレクトリ、第二引数にコピー先ディレクトリのオブジェクトを指定しています。

ファイルの更新日時を変更する方法

ファイルの更新日時を変更する場合は、FileクラスのsetLastModifiedメソッドを使用します。

public boolean setLastModified(long time)

long型の引数には、変更する時刻を指定します。

以下に更新日時を変更する方法を記述します。

public class FileClass{
    public void lastModified() throws IOException{
 
        File file  = new File("/Users/Shared/java/java.txt");
    	 
        //Calendarクラスのオブジェクトを生成する
        Calendar cal = Calendar.getInstance();
    	 
        //初期化する
        cal.clear();
    	 
        //日時を設定する
        cal.set(2010, 1, 1, 13, 00, 30);
    	 
        //ファイルに日時をセットする
        file.setLastModified(cal.getTimeInMillis());
    }
}

サンプルではFileクラスで対象のファイルを指定し、clearメソッドで一旦内容を初期化しています。

次にCalendarクラスのset関数で変更したい日時を「年,月,日,時,分,秒」で設定し、setLastModifiedのメソッドの引数に指定しています。

これで対象のファイルの更新日時が変更されます。

Fileクラスについてもっと詳しく知りたい方へ

Fileクラスのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

まとめ

ここでは、ファイルやディレクトリをコピーする方法や、更新日時の変更方法について説明しました。

Javaでのファイルのコピー処理は、WindowsのコマンドプロンプトやLinuxのターミナルのように、コマンドを1回打ち込むだけで簡単にできるものではありません。

もしファイルをコピーする方法を忘れてしまったら、この記事を思い出してくださいね!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次