Androidアプリ開発 FindBugs. Bad practice. java.io.File.delete() の例外的戻り値を無視しています。

2017年02月12日(編集2017年02月12日)
このエントリーをはてなブックマークに追加

Androidアプリ開発では、FindBugsを利用することで潜在的なバグを減らすことができます。
この記事は、FindBugsで検出される「java.io.File.delete() の例外的戻り値を無視しています。」の修正方法を記載した記事です。

環境はAndroid 7.1 (API level 25) です。

環境

  • OS X El Capitan
  • android sdk 25
  • Oracle jdk version 1.8.0_72
  • Android Studio 2.2.3

難易度

初心者向け

サンプルコード

Android-Media-Demo

FindBugs

FindBugsは、Java code内のバグをさがす静的解析ツールです。
アプリ開発時は、積極的に使いましょう。

java.io.File.delete() の例外的戻り値を無視しています。

開発、外部ストレージ内の画像ファイルを消すコードがFindBugsで警告されました。警告されたコードは以下のコードです。

{project_folder}/ImageSelectionDemoActivity.java
    /**
     * Delete temporary stored file.
     */
    private void deleteExternalStoragePublicPicture() {
        // Create a path where we will place our picture in the user's
        // public pictures directory and delete the file.  If external
        // storage is not currently mounted this will fail.
        File file = getExternalStorageTempStoreFilePath();
        if (file != null) {
            file.delete();
        }
    }
        

Android Studioでは、以下のようなエラーが表示されます。

図1. Android Studioのエラー

上記のコードがエラーになるのは、 ファイル操作の結果得られる返り値を無視すると、ファイル操作に失敗したことを検知できない。Javaのプログラムは、ファイル入出力を行うメソッドの返り値をチェックしなければならない。という理由です。

File#deleteメソッドはファイルまたはディレクトリが正常に削除された場合は true、そうでない場合は falseを返します。

よって、以下のように修正します。

{project_folder}/ImageSelectionDemoActivity.java
    /**
     * Delete temporary stored file.
     */
    private void deleteExternalStoragePublicPicture() {
        // Create a path where we will place our picture in the user's
        // public pictures directory and delete the file.  If external
        // storage is not currently mounted this will fail.
        File file = getExternalStorageTempStoreFilePath();
        if (file != null) {
           +if (!file.delete()) {
                Log.e("ImageSelectionCropDemo", "File deletion failed.");
            }
        }
    }
        

if文で返り値をチェックしてます。失敗した場合はログを出力しています。アプリによっては、SecurityExceptionの例外を投げても良いと思います。

最後に、FindBugsを実行して警告が消えていることを確認して対応完了です。

結論

FindBugsを使うことでバグのあるコードを減らすことができます。
コーディングの技術も向上するので、積極的に利用してください。

タグ検索で調べてみよう

Android7.1 バグ修正