最初に状況を説明したほうがいいと思います。
状況
私は s をフィルタリングするソフトウェアを少し書いていSet
ますFile
。
フィルターは次のとおりです。ファイルが非表示でない場合は、それを新しい に追加しSet
ます。
問題は、 の現在の動作がFile.isHidden()
次のようになっていることです。
File f = new File("C:\Documents and Settings\Administrator\Local Settings\Temp\REG28E.tmp");
System.out.println(f.isHidden());
プログラムは を出力しますfalse
。
ファイル自体 ( REG28E.tmp
) は実際には隠されていません。むしろ、それへのパスにある特定のフォルダーが非表示になっています ( Local Settings
)。
チェックするコードを少し作成したいと思います。
ファイルへのパスのどこかが非表示になっている場合、そのファイルは非表示としてマークされます。
ファイルのパスを再帰的にチェックするために、次の解決策を思い付きました。
boolean hidden = file.isHidden();
File parentFile = file.getParentFile();
while ((hidden == false) || (parentFile != null)) {
hidden = parentFile.isHidden();
parentFile = parentFile.getParentFile();
}
if (!hidden) {
acceptedFileList.add(file);
}
問題
そして最後に、問題に行き着きます。実際にファイルを追加する段階に到達することはできません。問題は、Java が C:\ ドライブ自体が隠されていると判断することです!
代わりに何ができますか?