OR
誰でも自由に記事を投稿・編集できるオープンリファレンス
記事ID:670
区分:プログラム  |  分類:Java  |  最終更新日:2015/03/09
クリエイティブ・コモンズ 表示-継承ライセンス 2.1
【Java】ファイルをコピーする
関連タグ:Java, File, FileChannel
このエントリーをはてなブックマークに追加      
本文
履歴
編集
閲覧数: 53,792
Java関連技術まとめ > 【Java】ファイルをコピーする

Javaでファイルをコピーするには、いくつかの方法があります。方法によって使用できるJDKのバージョンやライブラリが違いますので、使用の際は適宜使い分ける必要があります。

 

java.nio.FileChannelクラスを使用したコピー方法

JDK1.4以降

java.nio.FileChannelクラスを使用してファイルをコピーする場合は、transferTo() メソッドを使用します。

 

メソッド戻り型説明

transferTo(long, long, WritableByteChannel)

long

指定のチャネルファイルから指定された書き込み可能なバイトチャネルへバイトを転送します。

 

transferTo() メソッドは第一引数にコピー開始位置を、第二引数に転送される最大バイト数を、第三引数に出力先チャネルを指定することで、コピー元チャネルが参照するファイルをコピー先チャネルへコピーします。

 

【サンプルコード】

以下サンプルは「c:\temp\in.txt」ファイルを「c:\temp\out.txt」へコピーします。

import java.io.*;
import java.nio.channels.*;

public class FileUtils{

    public static void main(String args[]) {
        File in = new File("C:\\temp\\in.txt");
        File out = new File("C:\\temp\\out.txt");
        try {
            FileUtils.copyFile(in, out);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void copyFile(File in, File out) throws IOException {
        FileChannel inChannel = new FileInputStream(in).getChannel();
        FileChannel outChannel = new FileOutputStream(out).getChannel();
        try {
            inChannel.transferTo(0, inChannel.size(),outChannel);
        } 
        catch (IOException e) {
            throw e;
        }
        finally {
            if (inChannel != null) inChannel.close();
            if (outChannel != null) outChannel.close();
        }
    }
}

java.io.Fileクラスを使用したコピー方法

Javaの標準ファイル入出力(java.io.File)では、ファイルをコピーするメソッドはありませんので、java.io.Fileクラスを使用してファイルをコピーする場合は、ストリームを開いて読み書きする必要があります。

 

【サンプルコード】

以下サンプルは「c:\temp\in.txt」ファイルを「c:\temp\out.txt」へコピーします。

import java.io.*;

public class FileUtils{

    public static void main(String args[]) throws Exception{
        File in = new File("C:\\temp\\in.txt");
        File out = new File("C:\\temp\\out.txt");
        try {
            FileUtils.copyFile(in, out);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void copyFile(File in, File out) throws Exception {
        FileInputStream fis  = new FileInputStream(in);
        FileOutputStream fos = new FileOutputStream(out);
        try {
            byte[] buf = new byte[1024];
            int i = 0;
            while ((i = fis.read(buf)) != -1) {
                fos.write(buf, 0, i);
            }
        }
        catch (Exception e) {
            throw e;
        }
        finally {
            if (fis != null) fis.close();
            if (fos != null) fos.close();
        }
    }
}

 

関連記事
外部リンク
外部リンクはありません。
- 記事検索 -