Androidで高速なファイルコピー


Android(Java)でファイルコピーをするのには、単純にInputから読んで、それをそのままOutputに書き出す方法が単純です。しかしFileChannelを使用するとシンプルかつ高速にファイルをコピーすることができます。

ただしFileChannelを使用したコピーでは一度にコピーできるサイズが2GBに制限されるという仕様があるので、どこまでコピーしたか確認しながらコピーするように修正しました。

public static boolean copy(File src, File dst) {
        boolean result = false;
	
        FileInputStream inStream = null;
        FileOutputStream outStream = null;
        try {
            inStream = new FileInputStream(src);
            outStream = new FileOutputStream(dst);
            FileChannel inChannel = inStream.getChannel();
            FileChannel outChannel = outStream.getChannel();
            long pos = 0;
            while (pos < inChannel.size()) {
                pos += inChannel.transferTo(pos, inChannel.size(), outChannel);
            }
            result = true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (inStream != null) inStream.close();
                if (outStream != null) outStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        if ((! result) && dst.exists()) dst.delete();

        return result;
    }

純粋にJavaでのコピーならが、Files.copy()を使用するのが一番簡単です。

参照

How to make a copy of a file in android? – stackoverflow


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です