copy(Path, Path, CopyOption...)
メソッドを使用して、ファイルやディレクトリをコピーできます。 コピー先のファイルが存在する場合は、REPLACE_EXISTING
オプションを指定していない限り、コピーは失敗します。
ディレクトリのコピーは可能ですが、ディレクトリ内のファイルはコピーされません。このため、元のディレクトリにファイルが含まれている場合でも新しいディレクトリは空になります。
シンボリック・リンクをコピーする場合は、リンク先がコピーされます。 リンク先ではなくリンク自体をコピーするには、NOFOLLOW_LINKS
オプションかREPLACE_EXISTING
オプションを指定します。
このメソッドは可変引数を取ります。 StandardCopyOption
列挙型とLinkOption
列挙型の次の定数を使用できます。
REPLACE_EXISTING
– コピー先ファイルがすでに存在する場合でもコピーを実行します。 コピー先がシンボリック・リンクの場合は、リンク自体がコピーされ、リンク先はコピーされません。 コピー先が空でないディレクトリの場合は、FileAlreadyExistsException
例外が発生してコピーが失敗します。
COPY_ATTRIBUTES
– ファイルに関連付けられたファイル属性をコピー先ファイルにコピーします。 サポートされるファイル属性はファイル・システムおよびプラットフォームによって異なりますが、last-modified-time
はすべてのプラットフォームでサポートされ、コピー先ファイルにコピーされます。
NOFOLLOW_LINKS
– シンボリック・リンクをたどらないことを指定します。 つまり、コピー元のファイルがシンボリック・リンクの場合は、リンク自体がコピーされ、リンク先はコピーされません。
Enum
)について詳しくない場合は、『Enum Types』を参照してください。
copy
メソッドは、次のコードのように使用します。
import static java.nio.file.StandardCopyOption.*; ... Files.copy(source, target, REPLACE_EXISTING);
Files
クラスには、ファイルのコピーだけでなく、ファイルとストリームの間でのコピーに使用できるメソッドも定義されています。 copy(InputStream, Path, CopyOptions...)
メソッドを使用すると、入力ストリームからファイルにすべてのバイトをコピーできます。 copy(Path, OutputStream)
メソッドを使用すると、ファイルから出力ストリームにすべてのバイトをコピーできます。
サンプルのCopy
では、copy
メソッドとFiles.walkFileTree
メソッドを使用して、コピーを再帰的に行っています。 詳細は、『ファイル・ツリーの探索』を参照してください。