Javaでファイルをコピーする
この投稿では、Javaでファイルをコピーする方法について説明します。
ソースファイルの内容をJavaで指定されたターゲットファイルにコピーする方法はいくつかあります。次の各ソリューションは、ターゲットファイルが存在しない場合にそれを作成します。ターゲットファイルが存在する場合、そのファイルはソースファイルの内容で上書きされます。ファイルの内容のみをターゲットファイルにコピーする必要があり、ファイル属性は無視できることに注意してください。
ファイルのコピーは不可分操作ではないことに注意してください。 I / Oエラー、電力損失、プロセス終了などの場合、ターゲットファイルが不完全なままになる可能性があります。
1.使用する NIO
Java 7以降では、 java.nio.file.Files
、ファイル、ディレクトリ、またはその他のタイプのファイルを操作するいくつかの静的メソッドを提供します。ファイルをターゲットファイルにコピーするには、 copy(Path source, Path target, CopyOption… options) 方法。
このメソッドは、ソースファイルとターゲットファイル、およびコピーの実行方法を指定するオプションのパラメーターを取ります。デフォルトでは、ターゲットファイルがすでに存在する場合、コピーは失敗します REPLACE_EXISTING
オプションが指定されています。ソースとターゲットが同じファイルの場合、メソッドはファイルをコピーせずに完了します。ソースファイルまたは宛先ディレクトリのいずれかが存在しない場合は、 java.nio.file.NoSuchFileException
スローされます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.StandardCopyOption; class Main { private static void copyFile(File src, File dest) throws IOException { Files.copy(src.toPath(), dest.toPath(), StandardCopyOption.REPLACE_EXISTING); } public static void main(String[] args) { File from = new File("src.txt"); File to = new File("dest.txt"); try { copyFile(from, to); System.out.println("File copied successfully."); } catch (IOException ex) { ex.printStackTrace(); } } } |
2.Guavaライブラリの使用
Guava’s Files
クラスには、ファイルを操作するためのユーティリティメソッドがいくつかあります。私たちはそのを使用することができます copy(File from, File to) メソッド。1つのファイルから別のファイルにすべてのバイトをコピーします。
このメソッドは、宛先ファイルが存在しない場合、宛先ファイルを保持するディレクトリを作成しません。投げる java.io.FileNotFoundException
ソースファイルが存在しない場合、 java.io.IOException
I/Oエラーの場合。もしも to
と from
同じファイルを参照し、 java.lang.IllegalArgumentException
スローされます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import com.google.common.io.Files; import java.io.File; import java.io.IOException; class Main { private static void copyFile(File src, File dest) throws IOException { Files.copy(src, dest); } public static void main(String[] args) { File from = new File("src.txt"); File to = new File("dest.txt"); try { copyFile(from, to); System.out.println("File copied successfully."); } catch (IOException ex) { ex.printStackTrace(); } } } |
3. ApacheCommonsIOの使用
使用することもできます FileUtils
ApacheCommonsIOライブラリのクラス copyFile(File srcFile, File destFile) ファイルを新しい場所にコピーするメソッド。
Apache Commons IOを使用する主な利点は、宛先ファイルが存在しない場合に、宛先ファイルを保持するディレクトリが作成されることです。宛先ファイルとソースファイルが同じである場合、このメソッドはスローします java.io.IOException
、およびソースファイルが存在しない場合は、 java.io.FileNotFoundException
スローされます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; class Main { private static void copyFile(File src, File dest) throws IOException { FileUtils.copyFile(src, dest); } public static void main(String[] args) { File from = new File("src.txt"); File to = new File("dest.txt"); try { copyFile(from, to); System.out.println("File copied successfully."); } catch (IOException ex) { ex.printStackTrace(); } } } |
4.ストリームの使用
プレーンJavaを使用して、独自のコピーロジックを作成することもできます FileInputStream
と FileOutputStream
。必要なのは、あるファイルから別のファイルにすべてのバイトをコピーするためのバッファーです。これを以下に示します。
ソースとターゲットが同じファイルの場合、そのファイルの内容は削除されることに注意してください。ソースファイルまたは宛先ディレクトリが存在しない場合は、 java.io.FileNotFoundException
スローされ、 java.io.IOException
I/Oエラーの場合にスローされます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import java.io.*; class Main { public static void copyFile(File src, File dest) throws IOException { try (InputStream is = new FileInputStream(src); OutputStream os = new FileOutputStream(dest)) { byte[] buffer = new byte[1024]; int len; while ((len = is.read(buffer)) != -1) { os.write(buffer, 0, len); } } } public static void main(String[] args) { File from = new File("src.txt"); File to = new File("dest.txt"); try { copyFile(from, to); System.out.println("File copied successfully."); } catch (IOException ex) { ex.printStackTrace(); } } } |
5.使用する FileChannel
ソースファイルからターゲットファイルにバイトを転送するには、 transferFrom() からの方法 FileChannel
クラス。ファイルの読み取り、書き込み、マッピング、および操作のためのチャネルです。
ソースとターゲットが同じファイルの場合、そのファイルの内容は削除されることに注意してください。ソースファイルまたは宛先ディレクトリが存在しない場合は、 java.io.FileNotFoundException
スローされ、 java.io.IOException
I/Oエラーの場合にスローされます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; class Main { public static void copyFile(File src, File dest) throws IOException { try (FileChannel sourceChannel = new FileInputStream(src).getChannel(); FileChannel destChannel = new FileOutputStream(dest).getChannel()) { destChannel.transferFrom(sourceChannel, 0, sourceChannel.size()); } } public static void main(String[] args) { File from = new File("src.txt"); File to = new File("dest.txt"); try { copyFile(from, to); System.out.println("File copied successfully."); } catch (IOException ex) { ex.printStackTrace(); } } } |
これで、Javaでファイルをコピーすることができます。
こちらも参照: