Javaのファイル名チェックについて

このQ&Aのポイント
  • Java初心者です。ファイル名に日時の文字列が含まれているかどうかのチェック方法を教えてください。
  • 現在、C:/eclipse/workspaceフォルダ内に最後尾に"*****member.csv"がつくファイル名があるかどうかのチェック処理を行っています。
  • "member.csv"という固定文字ではなく、"*****yyyymmddHHMMSS.csv"というように日時の文字列がつくファイル名があるかどうかのチェックに変えたいです。どのようにすればよいでしょうか?
回答を見る
  • ベストアンサー

Javaのファイル名チェックについて

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; } } } }

  • Java
  • 回答数4
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
noname#155524
noname#155524
回答No.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; }

norinbe
質問者

お礼

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

その他の回答 (3)

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.3
norinbe
質問者

補足

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

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

数字部分を抜き出して、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と解析されますので、年月日が 一致しません。

norinbe
質問者

お礼

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

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

正規表現を使うのでしょうね。 private static String PAT="\d{14}\\.csv$"; if ( strCSVFileName.matches(PAT) ) この場合、文字列が数字14桁と".csv"で 終わるという意味で、数字が日付や時刻と して正しいかどうかは分かりません。 http://java.sun.com/javase/ja/6/docs/ja/api/index.html?java/util/regex/Pattern.html http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/String.html#matches(java.lang.String)

norinbe
質問者

お礼

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

関連するQ&A

  • Tomcatプロジェクトの.propertiesファイルの置き場

    当方、Tomcat5.0,Eclipseでサーブレットを開発しております。 初歩的な質問で申し訳ありませんが、プロパティファイルの置き場所が 分からず難儀しております。 どなたかご教示願います。 prop.load(new FileInputStream("C:/work/workspace/worktools/mail.properties")); 上記の様にフルパスを指定すると認識するのですが、 prop.load(new FileInputStream("mail.properties")); この様にパスを省略するとFileNotFoundExceptionが発生してしまいます。WEB-INF直下にファイルを置いてるのですが、間違いなのでしょうか?

    • ベストアンサー
    • Java
  • Javaのプロパティファイルの文字化け対策

    いつもお世話になっております。 一連の質問で大分クリアになって来たのですが、まだ課題が残っています。 xxx.propertiesファイルを作成したとします。 プロパティに日本語を設定しました。 Java上でgetProperties()をすると文字化けしてしまいます。 初歩的な質問で申し訳ありませんが、具体的な対策をご教示願います。 public String getMailSubject() throws MailSendErrorException { String subject = null; try { Properties prop = new Properties(); // プロパティファイルからキーと値のリストを読み込む prop.load(new FileInputStream(this.properties)); subject = prop.getProperty("mail.subject"); } catch (Exception e) { e.printStackTrace(); throw new MailSendErrorException(); } return subject; } 上記のソースでmail.subjectに設定してある日本語文字列を取得したいのですが色々試しましたが上手く行きません。

    • ベストアンサー
    • Java
  • <input>で送信するfileのMIMEチェック

    <input type="file">でcsvのみを送信できるようにするために、jQueryでtypeチェックしているのですが、csvのMIMEがPC(ブラウザ)環境によっていろいろあるみたいですが調べても出てこないのでお教えください。 html ------------------------------ <input type="file" accept=".csv" onChange="checkFile();"> ---------------------------------- javascript ------------------------- function checkFiles(){  var files = $('input').prop('files');  for (file in files){   console.log(files[file].type);  } } ---------------------------------- これを実行すると、環境によってfiles[file].typeが以下の4種類あることがわかりました。 text/csv text/comma-separated-values application/csv application/force-download 最初はここまでcsvの種類があるのが知らずに上から2つまでチェックしていたのですが、他の環境だと上記の4つまで出てきました。 もしかしたらさらに多くの種類があるのでは・・・?と思ってしまいますが、そもそも送信するのにcsvかどうかチェックするのにMIMEではダメなのでしょうか? ちなみにcsvファイルはExcelで出力したり、テキストエディタなどで作ったファイルです。 送信する人が作るのでどのアプリで作ってくださいと指定はできません。 どうぞよろしくお願い致します。

  • tomcat上でのpropertiesファイルの扱いについて

    内容)tomcat起動時にpropertiesファイルの内容を変更しても、有効にならないのは仕様でしょうか。 Servletから以下のコマンドを使用し、propertiesファイルを読み込む プログラムを作成しました。 private static final String FILE_NAME = "test.properties"; InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream( FILE_NAME ); プログラムを実行し、FILE_NAMEの各キー値をメモしました。 FILE_NAMEの各キーの値を編集後(tomcatの再起動はしていない)、 再度プログラムを実行したところ、以前のpropertiesファイルの キー値が返ってきてしまいました。 これは仕様でしょうか。

    • ベストアンサー
    • Java
  • JAVA  ログファイル名について

    現在、ログファイル用ディレクトリを出力する際に、ログファイル名用日付フォーマットを使用し、処理日付時間の形式で表示させるように設定しています。 SimpleDateFormat resultDirFormatter = new SimpleDateFormat("yyyyMMddhhmmss"); String today = resultDirFormatter.format(cal.getTime()); if (doWriteDetails) { File dir = new File("./result/TableDiffDetails/" + today); dir.delete(); dir.mkdirs(); } これを、日付+番号で作成されるようにしたいのです。 20060124072252 を 20060124_01 にしたい。 同じ日に作成された場合は、番号が1ずつ更新される。 01 02 03 ・・・・・・ 現在、サーブレット上で作成しています。 以上、宜しくお願致します。

  • CSVファイルを列ごとに読み込む処理について

    はじめまして。 よろしくお願いいたします。 プログラミングに興味をもち、JAVAに触れている者です。 現在eclipseでCSVファイルを列ごとに読み込んで表示する、というプログラムを作成しているのですが、コンパイルエラーを除去することができません。 エラー内容は 「処理されない例外の型 FileNotFoundException」 です。 これを見る限りでは読み込むファイルがないということらしいのですが、CSVファイルはちゃんと作成し、作成中のプログラムのファイルがあるディレクトリに置いてあります。 原因を探したいのですが、eclipseのこともjavaのこともよくわかっていないため、まるで見当がつきません。 どうかご教示をお願いいただけませんでしょうか? 以下が作成中のプログラムです。 package ioTest; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import java.io.FileInputStream; public class IOsample { public static void main (String[] args){ BufferedReader br = null; File csv = new File("sampleCSV.csv"); br = new BufferedReader( new InputStreamReader( new FileInputStream(csv))); while (br.ready()){ System.out.println(br.readLine()); } br.close(); } } レベルの低い質問で申し訳ありませんが、なにとぞよろしくお願いいたします。

    • ベストアンサー
    • Java
  • カタカナの「ソ」以降の文字が文字化けします

    propertiesファイルから文字列を読み込む処理を行っているのですが、文字列にカタカナの「ソ」がはいると、「ソ」自体とそれ以降の1文字が文字化けしてしまいます。 これには何か対処方法があるのでしょうか? こんな感じの処理を行っています。 【propertiesファイルの内容】 path=C:\\MyWork\\ソース\\download 【読み込み処理】 FileInputStream fis = new FileInputStream(propfile); Properties prop = new Properties(); prop.load(fis); String sjs_path = getString(prop.getProperty("path"); String uni_path = new String(sjs_path.getBytes("iso-8859-1"), "Shift_JIS"); アドバイスよろしくお願いいたします。

    • ベストアンサー
    • Java
  • c#でcsvファイルをリソースとして読み込むには?

    c#でcsvファイルをリソースとして読み込むには? 222.csvというファイルがあります、 これを「リソースの追加」からResourcesフォルダに入れ、ソリューションエクスプローラーから ファイルの存在を確認するところまではできたのですが、 このcsvファイルの内容を変数に代入できずに困っております。 222.csvがResourcesフォルダに入ると_222.csvというファイル名に変わるので、 以下の記述によって変数に代入できるかと思ったのですが、うまくいきません。 string path = Project1.Properties.Resources._222; 他に正しい記述の仕方があるのでしょうか? アドバイスお願いします。

  • javaのファイル読み込み処理の質問です

    あるディレクトリから.txtファイルを検索し 検索して出た結果を1つずつ読み込んでいきたいです どのようにしたらよいのでしょうか? private static String path="C:\\textfolder "; public static voif main(String[] args) { File dir = new File(path); File[] files = dir.listFiles(); String fileName = dir.getName(); for (int s = 0; s < files.length; s++) { try {//ファイルオープン BufferedReader br = new BufferedReader(new FileReader(fileName)); } } catch (IOException e) { e.printStackTrace(); } } return; } } 現状はこのような感じになっています pathの中身はディレクトリのパスを指定しています。 ディレクトリはC:\textfolder でtextfolderというフォルダに.txt(拡張子)のファイルが複数あったとします。

    • ベストアンサー
    • Java
  • ファイルへの書き込み

    いままでPrintメソッドを使って書き込みしていました。 ちょっと志向を変えてオブジェクト(?)をつかってプログラミングしています。 ファイルの書き込みでつまづいたので教えてください。 真ん中くらいに質問文があります Dim objFileSystem As Object Dim objFile As Object Dim strFileName As String Dim strBuff As String ' 読み込むファイル名 strFileName = "Readme.txt" ' FileSystemObjectオブジェクトへの参照 Set objFileSystem = CreateObject("Scripting.FileSystemObject") ' ファイルを開く Set objFile = objFileSystem.OpenTextFile(strFileName) ' ファイルの最後に達するまでループ strBuff = strBuff + naiyo.Text   'ここで質問。この書き方だとファイルモードが不正とエラーが出ます。   'この部分どう書けばよいのでしょうか? objFile.writeline (strBuff) ' ファイルを閉じる objFile.Close ' オブジェクトを解放 Set objFileSystem = Nothing Set objFile = Nothing オブジェクト変数(というのでしょうか(^^ゞ)を使ったファイルの書き込み方教えてください。

専門家に質問してみよう