- - PR -
File.listFiles で取れる File で相対パスを取りたい
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-01-29 21:53
まさです。
new File("<絶対パスで指定したディレクトリ>").listFiles() で取れる File オブジェクトで 指定したディレクトリからの相対的なパスを取得したいのですがどのようにすればよいでしょうか? たとえば、下記のようなディレクトリ構成があるとします。
結果: ------------------------------------------------------------- target = C:/Temp/a/aa/aaa getName = aaa getPath = C:/Temp/a/aa/aaa getAbsolutePath = C:/Temp/a/aa/aaa getCanonicalPath = C:/Temp/a/aa/aaa target = C:/Temp/a/aa/aab getName = aab getPath = C:/Temp/a/aa/aab getAbsolutePath = C:/Temp/a/aa/aab getCanonicalPath = C:/Temp/a/aa/aab target = C:/Temp/a/aa/aac getName = aac getPath = C:/Temp/a/aa/aac getAbsolutePath = C:/Temp/a/aa/aac getCanonicalPath = C:/Temp/a/aa/aac ------------------------------------------------------------- となる。 aaa -> ./aa/aaa aaa -> ./aa/aab aaa -> ./aa/aac という相対パスを取りたい。 難しいでしょうか。。。? | ||||||||
|
投稿日時: 2004-01-29 23:26
非常に惜しいところまで来ていますFile#listFiles() の代わりに File#list() を使ってみてはいかがでしょう。 ただし、指定したディレクトリからの相対パスは自分で組み立てる必要があります。 | ||||||||
|
投稿日時: 2004-01-29 23:32
まささん、こんにちは。
説明の最後のほうが理解できなかったので外してるかも 知れませんが、パス名の文字列操作で出来そうな気がします。 ターゲットのファイルの getCanonicalPath()で得られた文字列 から、指定したディレクトリのパスの文字列と一致する部分を 取り除いて、先頭に"./" を付加してはどうでしょうか? このとき、指定したディレクトリのパス名も getCanonicalPath() したものでないと、うまく行かない場合があると思います。 | ||||||||
|
投稿日時: 2004-01-30 08:53
まさです。
Gioさん、Kissingerさん、こんちわ。 すいません。ちょっと勘違いしてしまいました。
と書きましたが、本当は aaa -> a/aa/aaa aaa -> a/aa/aab aaa -> a/aa/aac の相対パスがとりたいです。 これなら簡単に取れますでしょうか? どちらにしても、Gioさん・Kissingerさんが言うように 文字列操作になってしまいますかねぇ。。。 とりあえず、list 試してみます。 [ メッセージ編集済み 編集者: まさ 編集日時 2004-01-30 08:54 ] | ||||||||
|
投稿日時: 2004-01-30 12:41
まさです。
list を使って下記のように修正してみました。
処理結果: a/aa/aaa a/aa/aab a/aa/aac となり、思い通りの結果が取れました。 ご協力ありがとうございました。 | ||||||||
|
投稿日時: 2004-01-30 16:36
おめでとうございます一つ処理効率の点で指摘させていただくと、再帰するメソッドのしかもループの中で、常に同じ値しか返さない System.getProperty("file.separator") を繰り返し呼び出しているのが気になります。 File#separatorChar フィールドが System.getProperty("file.separator") の値で初期化されているので、これを使うと幾分か速度が上がると思います。 以上、老婆心でした | ||||||||
1
