指定したディレクトリ下の全ファイルをリスト化するソースを書いてWindows上で動かしたいのですが、うまくいきません。
public void list(File file) {
 fileがディレクトリなら list(file.listFiles())で再帰。
fileがファイルならファイル名をArrayListに追加。
}

うまくいかないのは、下位のディレクトリを再帰的にみていくときに、上のディレクトリに戻ってきてしまうハードリンクがあるためです。

2つのHDDが C:\、D:\ になっているのですが、
Dドライブは C:\HDD\D というパスからも見れるようにドライブパスを設定しており、
Cドライブからは、D:\HDD\C というパスからも見れるようにドライブパスが設定してある状況だと、
 C:\HDD\D\HDD\C\HDD\D\HDD ・・・
というように循環してしまいます。

UNIX環境下のシンボリックリンクやハードリンクのループのようなものだと思い
JDK7 出導入された java.nio.file.Files のシンボリックリンクのチェック(ttp://download.oracle.com/javase/tutorial/essential/io/links.html) や
JDK6 でできる ttp://stackoverflow.com/questions/813710/java-1-6-determine-symbolic-links
の方法を試したのですが C:\HDD\D = D:\ということを検出できず、循環を防げませんでした。

何かいい方法はないでしょうか。

環境は Windows 7、JDK7です。