画像ファイルを選別するFilenameFilter

公開日: : 最終更新日:2014/01/26 Java

画像ファイルのみアップロードを許可する仕様があって、何てことはないがフィルターを作って対応したのでメモ。似たような要件はよく出てくるのでいつか役に立つときがくるはず。

作成したスニペット

Gist に登録済み。

package net.tomoyamkung;
 
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.List;
 
/**
 * 画像ファイルを選別する FilenameFilter
 * 
 * @author tomoyamkung
 *
 */
public class ImageFileFilter implements FilenameFilter {
 
    /* (non-Javadoc)
     * @see java.io.FilenameFilter#accept(java.io.File, java.lang.String)
     */
    @Override
    public boolean accept(File dir, String fileName) {
        try {
            List extensions = AppProperties.getInstance().getStringList("upload.file.image.extensions");
            for(String extension : extensions) {
                if(fileName.endsWith(extension) || fileName.endsWith(extension.toUpperCase())) {
                    return true;
                }
            }
            return false;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }
 
}
package net.tomoyamkung;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
 
public class AppProperties {
 
    private static AppProperties instance;
    private static final String PROP_FILE_NAME = "app.properties";
    
    private Properties prop;
    
    /**
     * コンストラクタ。
     * 
     * シングルトン。
     * 
     * @throws IOException
     */
    private AppProperties() throws IOException {
        prop = new Properties();
        prop.load(this.getClass().getClassLoader().getResourceAsStream(PROP_FILE_NAME));
    }
    
    /**
     * インスタンスを生成する。
     * 
     * @return AppProperties クラスのインスタンス
     * @throws IOException インスタンスの取得に失敗した場合
     */
    public static synchronized AppProperties getInstance() throws IOException {
        if(instance == null) {
            instance = new AppProperties();
        }
        return instance;
    }
 
    public String get(String key) {
        return prop.getProperty(key).trim();
    }
    
    public List getStringList(String key) {
        String[] array = get(key).split(",");
        List values = new ArrayList(array.length);
        
        for(int i = 0; i < array.length; i++) {
            values.add(array[i].trim());
        }
        return values;
    }
}
# 画像ファイルの許可する拡張子
upload.file.extensions = .jpeg,.jpg,.png,.gif

ファイル構成

  • AppProperties.java
    • プロパティファイルを扱うシングルトン
  • ImageFileFilter.java
    • 画像ファイルを選別する FilenameFilter
  • app.properties
    • 設定を切り出したプロパティファイル

使用したソフトウェアのバージョン

Java のバージョンは次の通り。

$ java -version
java version "1.7.0_11"
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

フィルタ処理について

ImageFileFilter に FilenameFilter を implements させて、accept メソッドをオーバーライドして実装してある。

有効な拡張子はプロパティファイルに定義してあり、一致した文字列で終わっていれば true 、すべて一致しなければ false としている。

Googleアドセンス用(PC)

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

関連記事

medium_182531101

ClassLoader を使って getResourceAsStream で取得したファイルを UTF-8 で読み込む

よく使う割には覚えられず毎回調べている気がするので備忘録としてメモしておきます。 文字コードを指定し

記事を読む

icatch-10139609144_5bc33706f9_z-resized

保存ダイアログを表示させてファイルをダウンロードさせる方法

例えば、ブラウザに表示している画像は右クリックを使ってダウンロードできますが、左クリックから保存ダイ

記事を読む

no image

Stream#map()とStream#collect()を使ってListを生成する

Java8 から導入された Stream API も少しずつ慣れてきて、「そういえばこういうパターン

記事を読む

no image

サーブレットでクラスパス上にあるプロパティファイルを参照するスニペット

よく使うわりにはいつも調べているのでいい加減メモすることにした。 "app.proper

記事を読む

no image

ファイルの拡張子が JPG であるかを問い合わせるスニペット

特に目新しいこともないが、同じようなことをする機会があるかもしれないのでメモ。Gist にも登録済み

記事を読む

icatch_2185253176-resized

Java8 の Optional 型を返す Generics を使ったメソッドを定義する

Java8 の Optional とガード節 に続いて Java8 の Optional ネタ。今回

記事を読む

no image

Stream#filter()で絞り込みmap()で処理するコードスニペット

Java8 から導入された Stream API も少しずつ慣れてきて、「そういえばこういうパターン

記事を読む

no image

Google Guava の Function を使った文字列加工の FluentIterable サンプル

お客様の都合上 Java7 で開発している案件があるのだが、Java8 の Function とか

記事を読む

no image

Exec Maven Plugin で maven コマンドでアプリを起動する

packaging タグに "jar" を指定した Maven プロジェクトをコマンドラインから起動

記事を読む

medium_2055608272

指定した年月の日付を Calendar オブジェクトの一覧で取得する

小ワザです。 業務で、指定した年月の日付を Calendar オブジェクトの一覧で取得する必要があり

記事を読む

Googleアドセンス用(PC)

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


八 + = 13

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Googleアドセンス用(PC)

icatch-jersey_multi_pathparams
Jerseyの@PathParamはスラッシュの間に複数指定できる

http://hoge-api/user/{id}.{format}

icatch-vagrant_box_customize
VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を

icatch-2015-006-1
バリデーションチェックにJava8のOptionalを使ってスマートに書く(自分比)

Web アプリのバリデーションチェックにアノテーションを使うことが増え

icatch-2015-005-1
ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。

icatch-2015-004-1
Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定

タイトルの通りだが、Vagrant を使って起動した CentOS に

→もっと見る

PAGE TOP ↑