###前提
何度もすみません。以前(https://teratail.com/questions/36024)で質問させていただいたのですが、先輩からのコードレビューの結果、修正を求められました。
理由としては主に以下でした、
・whileの中でインスタンス生成をしているため、出力フォルダの同名ファイルの枝番の数だけ無駄にメモリを消費することとなる。
・なんだか無限ループにみえる
・出力フォルダの同名ファイルの枝番の数だけループさせるの?
うまく言い返せませんでした。
どのように最適化していけばいいでしょうか。。
###処理仕様
ファイル出力をする際に、対象のフォルダ内に同名ファイルがあれば、
拡張子の前に枝番(例:20160525215810_access_1.log)を付与する。
枝番のついた同名ファイルがあれば枝番を+1して(例:20160525215810_access_2.log)出力する
そのほかの条件、
・ _(アンダーバー)と拡張子の間に数字以外の値が入っているファイルは無視
・ 枝番が飛んでいた場合(例:_1と_3がある)は、抜けている枝番のファイルを作成。
・同名ファイルがなければそのまま出力(例:20160525215810_access.log)
###現在のソースコード
Java
1// 出力ファイルの設定 2 String outputPath; //保存場所のパス(パス区切り文字で終わっている) 3String outputFileName; //保存ファイル名 4 File outputFile = new File(outputPath + outputFileName); 5 6// 拡張子取得 7 int extensionIndex = outputFileName.lastIndexOf("."); 8 String extension = outputFileName.substring(extensionIndex); 9 10//拡張子なしファイル名 11String filename = outputFileName.substring(0, extensionIndex); 12 13// 同名ファイルが存在する場合、出力ファイルに枝番を付与する処理 14 int branch = 0; 15 while (outputFile.exists()) { 16 branch++; 17 outputFile = new File(outputPath + filename + "_" + branch + extension); 18 } 19
回答2件
あなたの回答
tips
プレビュー