電子書籍の厳選無料作品が豊富!

Java初心者です。ファイル名に日時の文字列が含まれているかどうかのチェック方法を教えてください。

現在、以下のようにC:/eclipse/workspaceフォルダ内に最後尾に"*****member.csv"がつくファイル名があるかどうかのチェック処理を行っております。
それを"member.csv"という固定文字ではなく、"*****yyyymmddHHMMSS.csv"(yyyymmddHHMMSSは可変です)というように日時の文字列がつくファイル名があるかどうかのチェックに変えたいのですが、どのようにすればよいでしょうか?
どなたかご教授ください。

public class McL00001B {

//CSVファイル名
private static String FILE_NAME = "member.csv";

public static void main(String[] args) {

try
{
Properties prop = new Properties();
McContext.strFilePath = prop.getProperty("C:/eclipse/workspace");
}
catch(Exception e)
{
System.out.println(e.getMessage());
return;
}

//ファイルリスト取得
ArrayList<String[]> arrFileList = getFilesInDirectory(McContext.strFilePath);

//ファイルリストループ
for(String[] objFile:arrFileList) {

//ファイルパス・ファイル名を取得する。
String strCSVFilePath = objFile[0];
String strCSVFileName = objFile[1];

//ファイル名チェック
//ファイル名が***member.csv以外の場合
if(!strCSVFileName.endsWith(FILE_NAME)) {
continue;
}
}
}
}

A 回答 (4件)

質問に一貫性がないのですが、


1.member.csv はどこに行ったのか?
2.ファイル名の「*****」は固定なのか、任意の文字列なのか。

****が任意の文字列と仮定した場合、
以下のコードでチェックできそうです。
public boolean checkFileName( String fileName ) {
Pattern p = Pattern.compile( "^(.*)(\\d{14})\\.csv$" );
Matcher m = p.matcher( fileName );
if ( m.find() ) {
String time = m.group( 2 );
SimpleDateFormat df = new SimpleDateFormat( "yyyyMMddHHmmss" );
df.setLenient( false );
ParsePosition pp = new ParsePosition( 0 );
Date d = df.parse( time, pp );
return d != null && pp.getIndex() == 14;
}
return false;
}
    • good
    • 0
この回答へのお礼

わかりづらい質問にも関わらずご回答いただき、有難うございました。
ソースを参考にさせていただいたところ、無事できました!!!!
本当に有難うございました。

お礼日時:2011/07/07 09:46

http://detail.chiebukuro.yahoo.co.jp/qa/question …
参考になれば幸いです。

この回答への補足

上記URLを拝見させていただきました。
Java初心者に加え、上記サイトも初めて利用したため、あまりやり方がわからず、回答が締め切られてしまいました...。
ご回答を拝見させていただきましたが、なかなか理解が難しく、getFilesInDirectoryの内容を補足させていただきましたが、もし他によい方法があればご教授いただきたいのですが...。

お手数をおかけし、申し訳ございません。

補足日時:2011/07/06 09:52
    • good
    • 0

数字部分を抜き出して、Calendarで解析、


年月日、自分秒を比較するんでしょうね。

String part = ~ //ファイル名の数字部分
int yr = Integer.parseInt(part.substring( 0, 4));
int mo = Integer.parseInt(part.substring( 4, 6));
int dy = Integer.parseInt(part.substring( 6, 8));
int hr = ~以下略
int mt
int sc
GregorianCalendar gc =
new GregorianCalendar(yr,mo,dy,hr,mt,sc);
boolean ok =
(( yr == gc.get(Calendar.YEAR) )
&& ( mo == gc.get(Calendar.MONTH) )
-- 中略 --
&& ( hr == gc.get(Calendar.HOUR_OF_DAY) )
-- 中略 --
&& ( sc == gc.get(Calendar.SECOND) ));
if ( ok )//日付として正しい
else //日付として正しくない

例えば20111232とすると、カレンダ内は
2012/01/01と解析されますので、年月日が
一致しません。
    • good
    • 0
この回答へのお礼

早速有難うございました。
参考にさせていただきます。

お礼日時:2011/07/06 10:08

正規表現を使うのでしょうね。



private static String PAT="\d{14}\\.csv$";
if ( strCSVFileName.matches(PAT) )

この場合、文字列が数字14桁と".csv"で
終わるという意味で、数字が日付や時刻と
して正しいかどうかは分かりません。

http://java.sun.com/javase/ja/6/docs/ja/api/inde …
http://java.sun.com/javase/ja/6/docs/ja/api/java …
    • good
    • 0
この回答へのお礼

早速ご回答いただき、有難うございます。
重ねてのご質問で申し訳ございませんが、その数字が日時かどうかの判別は可能でしょうか?
宜しくお願いいたします。

お礼日時:2011/07/05 16:53

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