2つのJava.io.Fileオブジェクトfile1とfile2があります。内容をfile1からfile2にコピーしたい。 file1を読み取ってfile2に書き込むメソッドを作成しなくても、これを行う標準的な方法はありますか
いいえ、そのための組み込みの方法はありません。達成したいことに最も近いのは、次のようにtransferFrom
のFileOutputStream
メソッドです。
FileChannel src = new FileInputStream(file1).getChannel();
FileChannel dest = new FileOutputStream(file2).getChannel();
dest.transferFrom(src, 0, src.size());
そして、例外を処理し、finally
ブロック内のすべてを閉じることを忘れないでください。
怠惰になり、最小限のコードを書くことを避けたい場合
FileUtils.copyFile(src, dest)
apache IOCommonsから
いいえ。長い間Javaプログラマーは、そのような方法を含む独自のユーティリティベルトを持っています。これが私のものです。
public static void copyFileToFile(final File src, final File dest) throws IOException
{
copyInputStreamToFile(new FileInputStream(src), dest);
dest.setLastModified(src.lastModified());
}
public static void copyInputStreamToFile(final InputStream in, final File dest)
throws IOException
{
copyInputStreamToOutputStream(in, new FileOutputStream(dest));
}
public static void copyInputStreamToOutputStream(final InputStream in,
final OutputStream out) throws IOException
{
try
{
try
{
final byte[] buffer = new byte[1024];
int n;
while ((n = in.read(buffer)) != -1)
out.write(buffer, 0, n);
}
finally
{
out.close();
}
}
finally
{
in.close();
}
}
Java 7なので、Javaの標準ライブラリの Files.copy()
を使用できます。
ラッパーメソッドを作成できます。
public static void copy(String sourcePath, String destinationPath) throws IOException {
Files.copy(Paths.get(sourcePath), new FileOutputStream(destinationPath));
}
次のように使用できます。
copy("source.txt", "dest.txt");
Java 7ではFiles.copy()
を使用できますが、非常に重要です:新しいファイルの作成後にOutputStreamを閉じることを忘れないでください。
OutputStream os = new FileOutputStream(targetFile);
Files.copy(Paths.get(sourceFile), os);
os.close();
または、GoogleのGuavaライブラリから Files.copy(file1、file2) を使用します。