![]()
フォルダ内のファイル一覧は「File[] files = new File(strPath) .listFiles();」のような感じで簡単に習得できる。しかしこうやって取得したファイル配列は名前順に並んでいないし、隠しファイルや隠しフォルダも含まれている。
package com.Test130;
import java.io.File;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class Test130Act extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
File[] aFiles = GetFileList("/system/lib/");
for(File file : aFiles)
{
if(file.isDirectory())
Log.d("Test130","Found : " + file.getAbsolutePath() + "/");
else
Log.d("Test130","Found : " + file.getAbsolutePath());
}
}
//
//パスで指定されたフォルダ内のファイル/フォルダをソートして返す
//
public File[] GetFileList(String strPath)
{
//ソート用の独自オブジェクトクラス ここでしか使わないから関数内で無理やり宣言
final class Data
{
private File _data;
public Data(File data)
{
_data = data;
}
public File getFile()
{
return _data;
}
public int Compare(Data cmp)
{
String str1 = _data.getAbsolutePath();
String str2 = cmp._data.getAbsolutePath();
if(cmp == null || cmp._data == null || _data == null)
return 0;
if(_data.isDirectory() == cmp._data.isDirectory())
return str1.compareToIgnoreCase(str2);
if(_data.isDirectory())
return -1;
return 1;
}
}
//ソート用比較関数 ここでしか使わないから関数内で無理やり宣言
final class DataComparator implements java.util.Comparator
{
public int compare(Object o1, Object o2)
{
return ((Data)o1).Compare((Data)o2);
}
}
//strPathをファイルオブジェクトにする
File file = new File(strPath);
//strPathがファイルだったらそのファイルが含まれるフォルダを処理対象とする
if(file.isFile())
{
file = file.getParentFile();
if(file == null)
return null;
}
int i;
File[] afTmp;
//フォルダ内のファイル配列を取得
afTmp = file.listFiles();
if(afTmp == null || afTmp.length == 0)
return null;
//一度独自オブジェクトのリストに変換して、、、
java.util.ArrayList alist = new java.util.ArrayList();
for(i = 0; i < afTmp.length; i++)
{
if(afTmp[i].isHidden() == false) //隠しファイル/フォルダは無視
alist.add(new Data(afTmp[i]));
}
//オブジェクトリストからオブジェクト配列に変換
Object[] aObject = alist.toArray();
//javaのオブジェクト用メソッドを使ってソート
java.util.Arrays.sort(aObject,new DataComparator());
//オブジェクト配列からファイル配列に変換
afTmp = new File[aObject.length];
for(i = 0; i < aObject.length; i++)
afTmp[i] = ((Data)aObject[i]).getFile();
return afTmp;
}
}
![]()
これで指定したフォルダ内のファイルとフォルダがソートされた状態でログに出力された。
プロジェクトファイルをダウンロード
