4

FindBugsAntからEclipseでコードを分析するために使用しています。

次のスニペットはRV_RETURN_VALUE_IGNORED_BAD_PRACTICE次のようになります。

RV:メソッドは例外的な戻り値を無視します(RV_RETURN_VALUE_IGNORED_BAD_PRACTICE)

このメソッドは、チェックされていない値を返します。戻り値は、異常または予期しない関数の実行を示している可能性があるため、チェックする必要があります。たとえば、File.delete()メソッドは、ファイルを正常に削除できなかった場合(例外をスローするのではなく)、falseを返します。結果を確認しないと、メソッドの呼び出しが非定型の戻り値を返すことによって予期しない動作を通知するかどうかに気付くことはありません。

public void export (File file) throws IOException {
    if (!file.exists()) {
        file.createNewFile();
    }

    BufferedWriter bw = null;
    try {
        bw = new BufferedWriter(new FileWriter(file.getAbsoluteFile()));
    ...

実際、ファイルがどこに存在するかは関係ありません。メソッドは実行を継続する必要があります。例外が発生した場合、それは外部にスローされますexport()

このスニペットを書き直して、Findbugs構成ファイルで無効にせずに警告/エラーが表示されないようにするにはどうすればよいですか?

4

2 に答える 2

5

file.createNewFile()その特定のケースでは、ファイルはとにかくによって作成されるため、呼び出す必要はありませんFileWriter

ただし、ファイルの親フォルダーが存在することを確認する必要があります。

于 2013-03-08T07:53:02.123 に答える
4

f.createNewFile();戻りboolean

名前付きファイルが存在せず、正常に作成された場合は true 。名前付きファイルがすでに存在する場合はfalse

メソッドをに変更しますboolean result = f.createNewFile();

ファイルが存在するかどうかを気にしない場合は、コードを変更して、ファイルが存在しない場合にファイルを作成するチェックと直接作成を除外する必要あります。また、それでも現在のコードを使用したい場合は、警告を無視するように追加してください。existsBufferedWriterSuppressWarnings

于 2013-03-08T07:48:11.457 に答える