【Java】transferFromを使ってファイルをコピーする!

ファイルをコピーするにはFileChannelクラスのtransferFromメソッドを使用します。

FileChannelクラスのtransferFromメソッドは、ファイルをコピーするメソッドとなります。

しかし、transferFromメソッドだけでは、ファイルのコピーができませんので注意してください。
ファイルコピーの基本的な方法として、「FileInputStream」クラスと「FileOutputStream」クラスを使用してコピー元のファイルに内容を書き込む必要があります。

FileChannelクラスからFileInputStreamクラスとFileOutputStreamクラスのgetChannel()メソッドを使用し、ファイルに関連付けられたオブジェクトを生成します。
そこで、FileChannelクラスのtransferFromメソッドを使用することで、コピー先ファイルにコピー元ファイルの内容がコピーされます。

ファイルをコピーする方法はいくつかありますが、今回はFileChannelクラスのtransferFromメソッドを使ってファイルをコピーしていきます。

また、Java7から追加されたFilesクラスのcopyメソッドを使って、ファイルをコピーする方法についても解説していきます。

transferFromメソッドとは

FileChannelクラスのtransferFromメソッドとは、配列の要素コピーするメソッドであり、指定された配列をコピーし、指定された要素数分を新しい配列にコピーします。

transferFromメソッドの書き方

FileChannelクラスのtransferFromメソッドの構文は下記となります。

FileChannelクラスをインポートすることで、FileChannelクラスのメソッドを使用できます。

パラメータ

⚫︎ コピーするファイル:
コピーしたいファイル名を指定
⚫︎ コピーの開始位置:
コピーしたいファイルのコピーの開始位置を指定(基本は0)
⚫︎ ファイルのサイズ:
コピーしたいファイルの大きさを指定(sizeメソッドでファイルのサイズを指定)

transferFromの()に第1パラメータとしてコピーするファイルを、第2パラメータとしてコピーの開始位置を、第3パラメータとしてファイルのサイズを指定することでファイルをコピーします。

ファイルをコピーするサンプルコード

ファイルをコピーするサンプルコードを紹介します。

Main.java

出力結果

コピー前の存在確認:false
コピー後の存在確認:true

コンソールから実行する場合はレントディレクトリに「src.txt」を用意します。
Eclipseで実行酢する場合は、プロジェクト直下に「src.txt」を用意します。
その状態でMain.javaを実行すると、「src.txt」をコピーした「copyFile.txt」が作成されます。

また、ChannelクラスのtransferToメソッドを使用しても同様の結果となります。

transferToメソッドを使う場合は、次のように記述します。

今回のポイント

transferFromでファイルをコピー

ファイルをコピーするにはFileChannelクラスのtransferFromメソッドを使用する

⚫︎ FileChannelクラスのtransferFromメソッドでファイルのコピーを行う

⚫︎ transferFromメソッドの第1パラメータはコピーするファイルを、第2パラメータはコピーの開始位置を、第3パラメータはファイルのサイズを指定する

⚫︎ transferToメソッドを使用してもtransferFromメソッドと同じ結果となる

⚫︎ ファイルをコピーするには、FileInputStreamクラスのgetChannelメソッドを使用してコピー元のファイルチャネルを取得し、FileOutputStreamクラスのgetChannelメソッドを使用してコピー先のファイルチャネルを取得した後にFileChannelクラスのtransferFromメソッドtransferToメソッドを使用する

⚫︎ コピー元ファイルが読み込可能でない場合や、コピー先ファイルが書き込み可能でない場合は、例外が発生する

補足

NI0.2(Filesクラス)を使用してファイルをコピーする

NIO.2とはJava7で導入された「java.nio.file」パッケージとそのサブパッケージとを合わせたものであり、NIO.2のFilesクラスを使用することでとても簡単にファイル処理を行うことができます。

そのため、Filesクラスのcopyメソッドを呼び出すことで、ファイルをコピーすることができ、copyメソッドのパラメータには、以下のオプションを指定することができたり、複数のオプションを指定することもできます。

オプション 説明
StandardCopyOption.REPLACE_EXISTING コピー先ファイルがすでに存在する場 合に上書きでコピーする
StandardCopyOption.COPY_ATTRIBUTES コピー元ファイルの属性を含めてコピーする(環境によって違いがある)
StandardCopyOption.NOFOLLOW_LINKS コピー元ファイルがシンボリックリンクの場合にリンク自体をコピーし、リンク先はコピーされない

コピー先ファイルがすでに存在する場合、パラメーターオプションである「StandardCopyOption.REPLACE_EXISTING」を指定しないと、例外が発生します。

Main.java

出力結果

コピー前の存在確認:false
コピー後の存在確認:true

コンソールから実行する場合は、カレントディレクトリに「src.txt」を用意します。
Eclipseで実行する場合は、プロジェクト直下に「src.txt」でMain.javaを実行すると、「src.txt」をコピーした「copyFile.txt」が作成されます。

Writer
壷井

壷井

株式会社flyhawkの壷井です。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。

最新の案件情報

フリーランスエンジニアの案件探し