質問: new File(outputPath + filename + "_" + branch + extension); } ```
回答: File.exists()を使って判定していましたが、保存ディレクトリのFileオブジェクトに対してlist()でファイル名文字列配列を取得し、枝番付きのファイル名を順次作成し、そのファイル名が配列内にあるかどうかチェックする、という方法もあるかもしれません。ファイル名の配列をArrays.asListでListにすると、入っているかどうかのチェックがcontains()で一発で済みます。 ただし、逐次配列内をループして探索することになるので、ループ数は増えると思います。 その先輩の論に反論するならば... > > ・whileの中でインスタンス生成をしているため、出力フォルダの同名ファイルの枝番の数だけ無駄にメモリを消費することとなる。 > > > 変数が参照するFileオブジェクトが逐次入れ替わるため、古いFileはガベージコレクションの対象になる。むしろ上記の方法の様に存在するファイルを表すインスタンスを生成するという方法は、**確実にファイルの数だけインスタンスを生成する**ことになるが、この方法であれば、「そのディレクトリに存在するファイルすべてが入力したファイル名またはその枝番付きで、欠けのない連番になっている」状態の時のみ、ファイル数+1回のインスタンス生成になるが、途中で存在しないファイル名があればそこでインスタンス生成は打ち切られるため、**平均的にはインスタンス生成数は少ない。** > > ・なんだか無限ループにみえる > > > どこがそう見えるのか教えていただきたいくらいですが... > > ・出力フォルダの同名ファイルの枝番の数だけループさせるの? > > > ディレクトリのファイルが完全に連番であればその必要もないかもしれないが、今回その保証がない、むしろ欠けがあることを考慮すべきとの指示があるため、この方法でないと最小の欠け番を探すことができない。