###実現したいこと
ファイル出力をする際に、対象のフォルダ内に同名ファイルがあれば、
拡張子の前に枝番(例:20160525215810_access_1.log)を付与する。
枝番のついた同名ファイルがあれば枝番を+1して(例:20160525215810_access_2.log)出力するという処理を実装中です。
そのほかの条件としては。
・ _(アンダーバー)と拡張子の間に数字以外の値が入っているファイルは無視
・ 枝番が飛んでいた場合(例:_1と_3がある)は、抜けている枝番のファイルを作成。
です。
以下のソースコードで実装中なのですが、もっと効率的なやり方がありそうですので助言いただければと思います。
###現在のソースコード
Java
1 // 出力ファイル名の作成 2 String outputAbsolutePath = outputPath + outputFileName; 3 File outputFile = new File(outputAbsolutePath); 4 5 // 拡張子取得(.logか.txtであることは確定) 6 int extensionIndex = outputFileName.lastIndexOf("."); 7 String extension = outputFileName.substring(extensionIndex, extensionIndex + 4); 8 9 // 出力ファイル名の作成(枝番あり) 10 String fileName; 11 String outputFileBranch = outputFileName.substring(0, extensionIndex) + "_"; 12 13 String outputFileNameBranch1 = outputPath + outputFileName.substring(0, extensionIndex) 14 + "_1" + extension; 15 File outputFileBranch1 = new File(outputFileNameBranch1); 16 17 // 出力フォルダ内ファイル取得 18 File[] files = inputData.getOutputPath().listFiles(); 19 20 // 同名ファイル有無判定 21 for (File file : files) { 22 fileName = file.getName(); 23 // 同名ファイルあり 24 if (outputFile.exists()) { 25 // 同名ファイルに枝番号ありの場合は、枝番を+1のファイルを作成。 26 if (fileName.startsWith(outputFileBranch)) { 27 int beginIndex = fileName.lastIndexOf("_"); 28 int endIndex = fileName.indexOf("."); 29 int branchNumber = Integer.parseInt(fileName.substring(beginIndex + 1, endIndex)); 30 branchNumber++; 31 String outputFileNameBranch = outputFileBranch + branchNumber; 32 outputAbsolutePath = outputPath + outputFileNameBranch + extension; 33 } 34 // 枝番号1のファイルが存在しない場合は、枝番1のファイルを作成。 35 if (!outputFileBranch1.exists()) { 36 outputFileBranch = outputFileBranch + "1"; 37 outputAbsolutePath = outputPath + outputFileBranch + extension; 38 break; 39 } 40 } 41 }
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。