<%@ page contentType="text/html; charset=MS932" %><%@ page import="java.io.*" %><%@ page import="java.util.*" %><%@ page import="java.text.*" %><% //************************************************************************* /** * 画像一覧作成JSP ver.1 * 配置された画像と同じフォルダにある画像の一覧を作成します。 * * 使用方法: * このファイルの拡張子を".jsp"に変更し、画像を格納するフォルダに配置します。 * 画像フォルダは、サーブレットコンテナの配下にある必要があります。 * カスタマイズ: * 少しですがカスタマイズ用のパラメタがあります。 * 少し下のほうの「カスタマイズ項目」のブロックの定数を変更します。 * * 以下の定数は、全般的な設定を行います。 * ACCEPT_RE_PATTERN * 画像を現すファイル名に合致する正規表現を指定します。 * ファイル名は、すべて小文字に変換してからチェックされます。 * デフォルトでは、BMP,JPEG,GIF,PNGが対象になります。 * ENABLE_SORT_OPTION * true にするとソートメニューを表示します。 * false にすると、ファイル一覧のみ表示します。 * * 以下の項目は、一覧表示時にも使用します。 * デフォルト設定を、規定の定数値以外に変更した場合は、ファイル名の昇順で表示されます。 * SORT_FIELD_DEFAULT * ソート項目を、ファイル名(SORT_FIELD_BY_NAME)か、 * ファイルの更新日付(SORT_FIELD_BY_DATE)のどちらを使用するか選択します。 * SORT_ORDER_DEFAULT * ソート方向を昇順(SORT_ORDER_BY_ASC)か、降順(SORT_ORDER_BY_DESC)の * どちらにするかを選択します。 * * 確認環境: * WindowsXpSp2, Tomcat5.5.17, JavaSE1.5.09 * * ご注意: * このファイルは、ダウンロードして自由に使用・カスタマイズしていただいて構いませんが、 * ご使用の中で発生するいかなる問題・障害に対しても、公開者がなんら保障を行うことは * ありません。すべて使用される方の責任において、使用ください。 * なお、使用に当たっては、この「ご注意」「著作・制作」ブロックを削除・改変せず、 * また、当初の制作範囲を明示することを条件に、いかなる修正を行っていただいても結構です。 * 著作・制作: * MINyProjects 2006, http://www.minyprojects.com/waltraute/ ※URLは変わる場合があります。 */ %><%! // 定数宣言 /** ソート項目をファイル名にする */ private static final int SORT_FIELD_BY_NAME = 1; /** ソート項目をファイル更新日付にする */ private static final int SORT_FIELD_BY_DATE = 2; /** ソート方向を昇順にする */ private static final int SORT_ORDER_BY_ASC = 1; /** ソート方向を昇順にする */ private static final int SORT_ORDER_BY_DESC = 2; /* * カスタマイズ項目 * 以下の定数の値を変更することで、基本的な動作を変更することができます。 */ // ここから /** 一覧で許容するファイル名パターンの正規表現 */ public static final String ACCEPT_RE_PATTERN = "^.*\\.(bmp|jpg|jpeg|gif|png)$"; /** ソートオプションを表示する場合にtrue */ public static final boolean ENABLE_SORT_OPTION = true; /** ソート項目のデフォルト値を設定 */ public static final int SORT_FIELD_DEFAULT = SORT_FIELD_BY_DATE; // ファイル更新日付 public static final int SORT_ORDER_DEFAULT = SORT_ORDER_BY_DESC; // 降順 // ここまで /** * 指定数値を3桁ごとのカンマ区切りの文字列にする。 * @param value 処理対象の数値 * @return 引数の数値を3桁ごとにカンマ区切りにした文字列 */ private String commaDelimited(long value){ String val_ = "" + value; int num = val_.length() / 3; int opt = val_.length() - num * 3; StringBuffer ret_ = new StringBuffer(val_.substring(0, opt)); for(int i = 0 ; i < num ; i ++){ if(ret_.length() > 0){ ret_.append(","); } ret_.append(val_.substring(i * 3 + opt, (i + 1) * 3 + opt)); } return ret_.toString(); } /** * 指定日付を日時フォーマットで出力する。 * @param stamp 処理したい日付 * @return 引数の日付を"yyyy-MM-dd HH:mm:ss"のフォーマットで編集した文字列 */ private String formattedTimestamp(Date stamp){ SimpleDateFormat sdf_ = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf_.format(stamp); } //*****************************************************************************// %> <% // パス解決など String srvpath_ = request.getRequestURI().substring(request.getContextPath().length(), request.getRequestURI().lastIndexOf("/") + 1); String dirpath_ = request.getRequestURI().substring(0, request.getRequestURI().lastIndexOf("/") + 1); String docbase_ = application.getRealPath(srvpath_); File folderpath_ = new File(docbase_); %> IMAGE LIST OF FOLDER.

"<%= dirpath_ %>" image file list.


<% // 指定パスのフォルダが存在しなかった場合の処理 if(!folderpath_.exists()){ %> フォルダパスが無効です。WEBアプリケーションの設定を見直してください。 <% } // 指定パスがフォルダではなかった場合の処理 else if(!folderpath_.isDirectory()){ %> フォルダパスがディレクトリではありません。WEBアプリケーションの設定を見直してください。 <% } // 指定パスがフォルダだった場合の処理[正常] else{ // 画像ファイルのみ有効とするファイル名フィルタを作成 FilenameFilter filter_ = new FilenameFilter(){ public boolean accept(File dir, String name){ String name_ = name.toLowerCase(); return name_.matches(ACCEPT_RE_PATTERN); } }; // ファイル名フィルタに合致するファイルの一覧を取得 File[] files_ = folderpath_.listFiles(filter_); // ファイルが無かった場合の処理 if(files_.length == 0){ %> フォルダにファイルがありません。ファイル一覧を表示できません。 <% } // ファイルが存在した場合の処理 else{ int sort_field = SORT_FIELD_DEFAULT; int sort_order = SORT_ORDER_DEFAULT; // ソートオプションの表示 if(ENABLE_SORT_OPTION){ // ソート項目識別 try{ sort_field = Integer.parseInt(request.getParameter("field")); } catch(Exception e){} String sort_field_label; switch(sort_field){ case SORT_FIELD_BY_DATE: sort_field_label = "更新日時"; break; default: sort_field_label = "ファイル名"; sort_field = SORT_FIELD_BY_NAME; } // ソート順位識別 try{ sort_order = Integer.parseInt(request.getParameter("order")); } catch(Exception e){} String sort_order_label; switch(sort_order){ case SORT_ORDER_BY_DESC: sort_order_label = "降順"; break; default: sort_order_label = "昇順"; sort_order = SORT_ORDER_BY_ASC; } %>
<%= sort_field_label %><%= sort_order_label %> (項目変更: > >/ 順位変更: > >  
<% } %> <% // 対象をソートするため、ファイルをいったんMAPに格納する ArrayList list_ = new ArrayList(); for(int i = 0 ; i < files_.length ; i ++){ if(!files_[i].isFile()){ continue; } list_.add(files_[i]); } // 対象をソートする Comparator cmp_ = new Comparator(){ int m_sortfield = SORT_FIELD_DEFAULT; int m_sortorder = SORT_FIELD_DEFAULT; public int compare(Object src, Object dst){ int dir = 0; if((src == null) && (dst == null)){ } if((src == null) || (dst == null)){ dir = (src == null) ? -1 : 1; } if(!(src instanceof File) || !(dst instanceof File)){ } // ソート項目の選定 switch(m_sortfield){ case SORT_FIELD_BY_DATE: long cmp = ((File)src).lastModified() - ((File)dst).lastModified(); if(cmp != 0){ dir = (cmp > 0) ? 1 : -1; } break; // デフォルトのソート項目はファイル名 default: dir = ((File)src).getName().compareTo(((File)dst).getName()); break; } // ソート順位を加味して返却 return (m_sortorder == SORT_ORDER_BY_ASC) ? dir : -dir; } public boolean equals(Object obj){ return super.equals(obj); } /** * コンパレータ初期化 */ public Comparator init(int field, int order){ m_sortfield = field; m_sortorder = order; return this; } }.init(sort_field, sort_order); Collections.sort(list_, cmp_); for(int i = 0 ; i < list_.size() ; i ++){ File tmp_ = (File)list_.get(i); String bgcolor_ = ((i % 2) == 1) ? "white" : "antiquewhite"; %> <% } %>
 file name   last modified   size [byte] 
 <%= tmp_.getName() %>   <%= formattedTimestamp(new Date(tmp_.lastModified())) %>   <%= commaDelimited(tmp_.length()) %> 

<%= list_.size() %> file(s). <% } } %>
2006 MINyProjects.