2011年3月14日月曜日

SDからのフォントファイル読み込み

SDカードの\fontsフォルダー内からフォントファイルを取得する方法
ArrayList fontFile = new ArrayList();
String stateSD;
// SDカードがマウントされてるかの確認
stateSD = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(stateSD)) {
    // フォントファイルが格納されているディレクトリを設定
    File file = new File(Environment.getExternalStorageDirectory().getPath() + "/fonts");
    // ディレクトリ内のファイルを取得
    String fileName[] = file.list();
    for(int i = 0; i < fileName.length; i++) {
        // ファイル名を取得
        File selectName = new File(file.getPath() + "/" + fileName[i]);
        // フォントファイル(ttf,otf)を選別
        if(selectName.getName().endsWith("ttf") || selectName.getName().endsWith("otf")){
            fontFile.add(file.getPath()+"/"+fileName[i]);
        }
    }
}
SDカード内の全てのフォルダー内からフォントファイルを取得する方法
ArrayList folderList = new ArrayList();
ArrayList fontFile = new ArrayList();
String stateSD;
// SDカードがマウントされてるかの確認
stateSD = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(stateSD)) {
    // ルートディレクトリを取得
    File file = Environment.getExternalStorageDirectory();
    // ルートディレクトリをfolderListに追加
    folderList.add(file.getPath());
    for(int i = 0; i < folderList.size(); i++) {
        // フォルダを設定
        File subFolder = new File(folderList.get(i));
        // フォルダ内のフォルダ・フィル名を取得
        String selectName[] = subFolder.list();
        for(int j = 0; j < selectName.length; j++) {
            // フォルダ・ファイルを1つづつ設定
            File subFile = new File(subFolder.getPath() + "/" + selectName[j]);
            // 設定された項目がフォルダか判別 フォルダならfolderListに追加/目的のファイルならファイルリストに追加
            if(subFile.isDirectory()) {
                folderList.add(subFolder.getPath() + "/" + selectName[j]);
            }
            else if(subFile.getName().endsWith("ttf") || subFile.getName().endsWith("otf")) {
                fontFile.add(subFolder.getPath() + "/" + selectName[j]);
            }
        }
    }
}
この方法だと、フォルダーに何も入ってない場合selectName.lengthで、例外が発生するかなぁ・・・
try~catchで、例外処理をした方がよさそう。

0 件のコメント:

コメントを投稿