- - PR -
ファイル階層を読み込んでファイルのパスを全て取得したいですが
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-06-24 16:56
お世話になります。
Rootからファイルの階層をみて全てのファイルのパスを取得したいです。 でもちょっと悩んでいるのは Dirの中にまたDirがあるかもしれませんし、その階層が何階層か決まっているわけでもないのでどういうふうなロジッグにすればいいか分からなくて困っています。 Rootの下にDirがA、B、Cあって Aの下にはDirがa,b,cあって Bには。。。 Cには。。 こういう風に考えるとめちゃくちゃになっちゃいまして。。。 Vectorなどに入れてやろうと思っていますが なかなか難しいです。 どうすれば一番簡単に的確にできますでしょうか。 ご指導よろしくお願いします | ||||
|
投稿日時: 2004-06-24 17:18
再帰(recursive)って、ご存知ですか?
プログラムロジック的には難度は高めですが、こういうときには便利です。 #ちなみに、Javaの用語ではなく、プログラミングでの一般用語です。 http://www.rsch.tuis.ac.jp/~ohmi/software-intro/recursive.html に、解説を見つけました。 | ||||
|
投稿日時: 2004-06-24 17:39
私はJavaはほとんど知らないのでコードは示せませんが、アルゴリズムとしては木の走査の話ですね。
Javaのコードでどう書くかではなく、まず考え方を理解されるとよろしいかと思います。 ディレクトリのパスを引数に渡すと、それ以下の全てのファイルのパスのリストを返す関数(f()と呼びます)を作ります。 すると、取得する側ではRootを引数に渡してf()を呼び出してやれば全てのファイルのリストが取得できますよね。 で、f()の実装はどうするかというと、引数で渡されたディレクトリの中に存在するファイルの一覧と、ディレクトリ以下の全てのファイルの一覧を返してやればOKですよね。 ファイルの一覧は問題なく取得できますが、ではディレクトリ以下の全てのファイルの一覧はどう取得するかというと・・・もうそのための関数f()を作っているわけじゃないですか。 つまりf()の中でf()を使って仕事をすることになります。 これが再帰関数呼び出しというやつです。 アルゴリズムは良いプログラムを作る上で大事なものですので、「アルゴリズム」と「データ構造」について書かれた書物などを読んでみるとレベルアップできるかと思います。 [ メッセージ編集済み 編集者: 一郎 編集日時 2004-06-24 17:40 ] | ||||
|
投稿日時: 2004-06-24 17:42
jakarta commons IO に...。
でも自作してみるのもいいプログラム演習になりますね。 | ||||
|
投稿日時: 2004-06-24 17:47
Javaで再起をしたことなかったので勉強がてらにつくってみました。
Win環境限定で作っちゃったので、パスの記号とかWin用ですが・・・(^^;
こんなんでお役に立てれば幸いですが・・・。 | ||||
|
投稿日時: 2004-06-24 18:12
くっだらないことですが,ちょっと気になったので確認させてください。
オブジェクト指向だと,あるメソッドから同じメソッドを呼んでも 対象となるインスタンスが違ってくる場合がありますよね。 そういう場合は「再帰」って呼んでいいんでしょうか? # 再帰は『自分自身を呼び出す』という説明がよくされますが, # インスタンスが違うと『自分自身』って感じがしなくて・・・ [ メッセージ編集済み 編集者: raccoon 編集日時 2004-06-24 18:15 ] | ||||
|
投稿日時: 2004-06-24 18:14
「ネストの上限が不確定なので再帰で書くは不適切では ?」と発言しようとしたら、commons IO も再帰で実装していますね...。実用上はあまり問題にならないのでしょうけれど。
最初は再帰で実装して、再帰を使わないように書き換えるのもいい演習になりますね | ||||
|
投稿日時: 2004-06-24 19:27
ちなみに、パスの区切りは File.pathSeparetor とかを使うと環境依存じゃないコーディングにできます。
http://java.sun.com/j2se/1.3/docs/api/java/io/File.html#pathSeparator | ||||
