web-dev-qa-db-ja.com

警告:File.mkdir()は無視されます

Media RecorderAPIを使用して基本的なオーディオ録音アプリを作成しました。 SDカードにフォルダを作成し、記録したファイルをそのフォルダに保存しようとしています。次のコードでこの警告が表示されます。

File.mkdir()は無視されます

    // Assign random number to avoid audio file from overwriting
    Long tsLong = System.currentTimeMillis()/1000;

    // Specify a Location for the recorded file to be stored in the SD card
    mFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/AudioRecordTest/";
    File path = new File(mFileName);
    if(!path.exists()) {
        path.mkdir();
    }
    mFileName += "/AudioRecordTest_" + tsLong.toString() + ".mp3";

この警告メッセージを解決する方法。他に間違いがある場合は、コードを自由に変更してください。

12
Srikar Reddy

私が間違っている場合は訂正してください。ただし、(コンパイル)警告メッセージには実際に次のように書かれていると思います。

File.mkdir()の結果は無視されます

...またはそのようなもの。これは、ディレクトリが作成されたかどうかを示すmkdir()呼び出しの結果を無視していることを示しています。

警告を回避する1つの方法は、結果をテストして適切に行動することです。もう1つは、結果を一時変数に割り当てて無視し、ディレクトリが作成されるべきときに作成されなかったために(潜在的に)後でクラッシュすることです。

(どちらの解決策が優れているかを推測します...)


他に間違いがある場合は、コードを自由に変更してください。

あなたが尋ねたので... Java変数名にハンガリアン記法を使用するのは悪いスタイルです。Javaは、すべての変数が明確に宣言されている強い型の言語です変数の型が何であるかを伝えるために、いくつかの恐ろしい識別子規則の精神的なクラッチは必要ありません。

15
Stephen C

@ Stephen Cが示唆するように、私はこれらの方法で処理しました

1)

boolean isDirectoryCreated= path.mkdir();

'isDirectoryCreated'を無視します

2)(推奨)

 boolean isDirectoryCreated=path.exists();
 if (!isDirectoryCreated) {
     isDirectoryCreated= path.mkdir();
 }
 if(isDirectoryCreated) {
    // do something
 }

3)

if (!path.exists()) {
   if(path.mkdir()){
     // do something
   }
}
16
Rohan Pawar

この警告を無視する場合は、メソッドに次のように追加します。@ SuppressWarnings( "all")

1
SCCSS

ユーティリティ関数を作成しました:

@SuppressWarnings("unused")
private static void IGNORE_RESULT(boolean b) {}

そして、使用するには:

IGNORE_RESULT(path.mkdir());

自己文書化であるため、このソリューションが好きです。あなたは、結果があることを知っており、意図的にそれを無視していることを明示的に述べています。また、コンパイル中にNOPに最適化する必要があるため、無駄な警告を抑制するためだけに実行時に不要なテストを行う必要はありません。

1
Eric Lange