例えば、
public void execute( File file ) {
List<String> list = new ArrayList<String>();
list.add(file.getPath());
}
とやってしまうと、思うようにいかないと思います。
listをどう扱ったらいいかわからないですから。
(list.addの直後にlistが破棄されるので、扱いようもないです。)
ではどうすべきかというと、
最終的にこのプログラムをどういう結果にしたいかをまず明確にする必要があります。
・ListをDBに出力したい
・Listを画面に出力したい
・Listの検索結果を出力したい
などなど、いろいろな結果があるかと思います。
これを明確にしないと、『Listをどのように保持したらよいか』
が見えてきません。
例えば、.txtを含むファイルのみを出力したいという場合
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class App {
public static void main(String[] args) {
(new App()).readFolder(new File("c:\\"));
for(int i = 0; i < _list.size(); i++) {
if(_list.get(i).indexOf(".txt") != -1) {
System.out.println(_list.get(i));
}
}
}
// メンバ変数で管理
static List<String> _list = new ArrayList<String>();
/**
* ディレクトリを再帰的に読む
* @param folderPath
*/
public void readFolder( File dir ) {
File[] files = dir.listFiles();
if( files == null )
return;
for( File file : files ) {
if( !file.exists() )
continue;
else if( file.isDirectory() )
readFolder( file );
else if( file.isFile() )
execute( file );
}
}
/**
* ファイルの処理
* @param filePath
*/
public void execute( File file ) {
_list.add(file.getPath());
}
}
という実装方法が考えられます。
ちょっとだけ解説すると、
・mainより自身のクラスのインスタンスを生成し、readFolder()を呼び出す。
・readFolder()でフォルダ及びサブフォルダのファイルパスを全てメンバ変数_listへ格納
・_listのうち、.txtを含むもののみ出力
となっています。
なぜメンバ変数を使用したかといいますと、
・readFolder()のあとで、_listを使用したいため、
・メソッド内で_listを操作したいため
メンバ変数のデータ保持が必要となりました。
これは、いろいろな要件が加わってくることで、
保持の仕方が代わります。
ですので、まずはその要件を固めるために、
「プログラムの結果を明確にする必要がある」というわけです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/16 04:03
2015/10/16 04:55