File.equals()で比較すると、実はパスの文字列で比較していたとは、この私としたことがぬかったわ。

public boolean equals(Object obj)
この抽象パス名と同じファイルまたはディレクトリを示す抽象パス名である場合にだけ true を返します

http://java.sun.com/javase/ja/6/docs/ja/api/java/io/File.html#equals(java.lang.Object)

つまり、

File a = new File("c:\\aaa.txt");
// と
File b = new File("./aaa.txt");
// で同じファイルを指していても、
if( a.equals(b) ){
  // ここには入らない
}

それぞれ getCanonicalFile() を取得してそれ同士を比較するとOK.