【Java】IOUtils.copyを使ってファイル間コピーを簡単にする方法

Javaでファイルを読み込んで、別のファイルに出力する方法を紹介していきます。

ファイルからファイルへコピーにはIOUtils.copyを使ってシンプルなコードをかいていきます。

[スポンサーリンク]

もくじ

IOUtilsを使わないケース
IOUtilsを使ったケース
try-with-resourcesを使ってさらにシンプルに

IOUtilsを使わないケース

ではまずは最初IOUtilsを使わずにJavaだけでファイルを読み込んで、別のファイルに出力していきましょう。
こちらネット上でよく見かける書き方ですね。

InputStream input = null;
OutputStream output = null;
try {
    input = new FileInputStream("org.txt");
    output = new FileOutputStream("new1.txt");
    int c;
    while ((c = input.read()) != -1) {
        output.write(c);
    }
} finally {
    if (input != null) {
        input.close();
    }
    if (output != null) {
        output.close();
    }
}

いつみても6行目〜9行目のところはちょっと読みにくいです。
なんだか呪文のようにさえみえてきます。

IOUtilsを使って、6行目〜9行目のところをシンプルなコードに変えていきます。

IOUtilsを使ったケース

IOUtilsを使うと先程のwhile文で回していた箇所がシンプルな書き方になります。

InputStream input = null;
OutputStream output = null;
try {
    input = new FileInputStream("org.txt");
    output = new FileOutputStream("new2.txt");
    IOUtils.copy(input, output);
} finally {
    if (input != null) {
        input.close();
    }
    if (output != null) {
        output.close();
    }
}

IOUtilsを使うにはpom.xmlへこちらを追加して下さい。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
</dependency>

一番最初のコードに比べるとシンプルにはなりましたが、streamをcloseしている箇所がちょっと長く感じてしまいますね。

次では、Java7から登場したtry-with-resourcesを使ってstreamをcloseの部分が短くなるようにしていきます。

try-with-resourcesを使ってさらにシンプルに

どうですか?
一段とシンプルになったでしょう?
一番最初のコードに比べると、IOUtilsとtry-with-resourcesを使うだけでこんなにもシンプルになるものです。

try (InputStream input = new FileInputStream("org.txt");
     OutputStream output = new FileOutputStream("new3.txt")) {
     IOUtils.copy(input, output);
}

try-with-resourcesは、finallyと同じタイミングでstreamを自動的にcloseしてくれるので、closeの処理を明示的にロジックへ自分で書く必要がありません。

もちろん、tryの中に複数のstreamを定義してもちゃんとcloseされます。

ちなみに、try-with-resourcesはJavaバーション7から提供された機能です。
詳しくはこちらを参照して下さい。

Javaのバージョン

今回検証したjavaのバージョンは8です。

さいごに

Javaのファイル入出力のロジックって複雑なロジックをイメージしちゃいがちですが、ライブラリを使うこでかなりスッキリとさせることができます。

一番最後のロジックくらいスッキリさせれば書く方も読む方も楽ができて嬉しいですね。

それでは!