画像ファイルを選別する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

関連記事

no image

画像ファイルのサイズ(縦横じゃなくて容量)を取得するスニペット

File#length で取得できるとは知らなかった。Gist にも登録済み。 /** * 画

記事を読む

icatch-thumbnail

レスポンスにサムネイル画像を返す API のサンプル

今回は直接 ImageMagick は関係ありませんが、また画像ネタです。この辺りのことを仕事で扱っ

記事を読む

no image

プロセスの起動を確認するプログラム

プロセスが起動しているかを確認するプログラムを Java で書いてみました。Excel のプロセス確

記事を読む

icatch-3361b5e1-resized

Optional型の変数にget()とifPresent()は使わない

Java8 から導入された Optional を勉強するため、過去にプライベートで書いたコードに O

記事を読む

medium_182531101

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

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

記事を読む

GradleLogoReg

SDKMAN!(GVM) を使って Mac に Gradle をインストールする

長らく Java のアプリ開発には Maven を使ってきたが、時代に取り残されている感じがするので

記事を読む

no image

ディレクトリに関するユーティリティ

ディレクトリに関するスニペットをいくつか書いた。いつかコピペする日が来ると思うのでメモしておく。

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

GradleLogoReg

Gradle で Java アプリのプロジェクトを作成して Eclipse にインポートするまでの手順

Mac に SDKMAN! を使って Gradle をインストールしたので、実際にプロジェクトを作成

記事を読む

Googleアドセンス用(PC)

Message

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


3 + 六 =

次の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 ↑