アプリ版:「スタンプのみでお礼する」機能のリリースについて

ファイル名を日付とその日の中の通し番号にしたいと思っています。
例えば2009/07/17日だったらファイル名を
20090717+その日の中の通し番号とする。
日付をファイル名にするところまではできたのですが「その日の中の
通し番号とする」部分がわかりませんので教えていただきたいのですが。
import java.text.SimpleDateFormat;
import java.util.Date;

public class CreateFileName {
public static void main(String args[]){
Date date1 = new Date();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
//ファイル名は日付とその日の中の通し番号
String fileName = sdf1.format(date1).toString()+".pdf";
System.out.println(fileName);
}
}

A 回答 (5件)

ずっと動作しているプログラムならば内部の変数をカウントすることで出来そうですが、そうでないとなるとなかなか面倒ですね。



ファイルを作成するフォルダ内の本日日付に該当するファイル一覧を抽出し、最大+1のファイル名とする、とか。
    • good
    • 0

ファイルに最大値を保存しておいて、「読み込んだ値 + 1」 とする。


もちろん、最大値を保存したファイルの値も +1する。
日付が変わったらリセット。
アクセスカウンタなどでよく使う手です。

ファイル操作の場合、別スレッドなどからの書き込みにより、
ファイルがバッティングしたり、最大値を保存しているファイルを
取り合いになったり・・・
ファイル操作はロックやら例外処理やら、気を遣いますね。
    • good
    • 0

ディレクトリ走査が一番順当かと。


テストしてないんで動かなかったらすみません(^^;)

import java.text.SimpleDateFormat;
import java.util.*;
import org.apache.commons.io.filefilter.*; //apache commonsIOが必要


public class CreateFileName {
private static final String DELIM = "-"; //デリミタ
private static final String DATE_FORMAT = "yyyyMMdd";

public static void main(String args[]){
String datePrefix = calcPrefix();
int lastId = findLastId(datePrefix);
int currentId = lastId++;

//大量にやるならStringBuilderを使うほうがいい
String fileName = datePrefix + DELIM + currentId + ".pdf";

System.out.println(fileName);
}//main()

private static String calcPrefix(){
Date date1 = new Date();
SimpleDateFormat sdf1 = new SimpleDateFormat(DATE_FORMAT);
return sdf1.format(date1);
}//calcPrefix()

private static int findLastId(String datePrefix){
File dir = new File(".");
FileFilter fileFilter = new RegexFileFilter("^"+datePrefix+DELIM+"[0-9]+"+".pdf");
List<String> fileList = Arrays.asList(fileFilter);

//1つも見つからなかったら、IDは0
if(fileList.isEmpty()){
return String.valueOf(0);
}else{
//String型の自然順序と逆順でソート(一番大きいものが前)
Collections.sort(fileList, Collections.reverseOrder());
String largestFileName = fileList.get(0);
}
//Idを取り出す
Scanner scanner = new Scanner(largestFileName).useDelimiter(DELIM+"|"+".");
//assert文はデバッグ用
String actualDatePrefix = scanner.next();
assert actualDatePrefix.equals(datePrefix);
assert scanner.hasNextInt();
int lastId = scanner.nextInt;
String remains = scanner.next();
assert remains.equals("pdf");
assert !(scanner.hasNext());
scanner.close();

return lastId;
}//findLastId()





}//class
    • good
    • 0

ちょと補足で



//大量にやるならStringBuilderを使うほうがいい
String fileName = datePrefix + DELIM + currentId + ".pdf";

File file = new File(fileName);
assert !(file.exists());

System.out.println(fileName);
}//main()

までやって、java -eaで試しに実行するとちゃんと動いてるかわかります!(無責任ですみません(^^;))
    • good
    • 0

ていうかメモ帳で書くとやっぱりバグがいくつかありますねぇ・・・・(^^;)デバッグしてお使いください。

。。すみません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!