私はJFileChooserを使ってディレクトリを選択するアプリケーションを持っています。このアプリケーションでは、シンボリックリンクを処理しようとは思わないし、複数のプラットフォームで実行したいと考えています。したがって、コードは選択されたファイルがシンボリックリンクであるかどうかを判断し、そうであればエラーダイアログを表示します。FileChooserはGUIの選択と入力ファイル名の間で差をつけます
ここでは、JFileChooserからファイルを取得するコードを示します。
public File getDirectoryChoice(String buttonText, String currentDirectory)
{
File chosenFile = null;
if (fileChooser == null) { fileChooser = new JFileChooser(); }
if (currentDirectory != null)
{ fileChooser.setCurrentDirectory(new File(currentDirectory)); }
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fileChooser.setApproveButtonText(buttonText);
int returnValue = fileChooser.showOpenDialog(mainFrame);
if (returnValue == JFileChooser.APPROVE_OPTION)
{
chosenFile = fileChooser.getSelectedFile();
}
return chosenFile;
}
と、ここで私が選択したファイルがシンボリックリンクであるかどうかを判断するために使用するコードです:Windows 7の上で
public static boolean isSymbolic(File f)
{
try
{
String absolute = f.getAbsolutePath();
String canonical = f.getCanonicalPath();
return !(absolute.equals(canonical));
}
catch (IOException ioe)
{
return false;
}
}
:ユーザーがマウスを使用して、指定されたディレクトリを選択した場合、これが正常に動作します。ユーザーが同じディレクトリ名をファイル名テキストボックスに入力すると、2番目のコードスニペットは、絶対パスと正規パスが同じでないことを示します。ユーザーが末尾のバックスラッシュを入力したかどうかは関係ありません。
'return'ステートメント行のデバッガでこれを停止し、2つの文字列の詳細を調べると、絶対パス文字列のハッシュ値は大きな負数になり、正規文字列のハッシュ値私はそれがなぜ起こるのか分からず、実際には(Eclipse)デバッガの奇妙なものかもしれません。
この違いがある理由を教えてもらえますか?
資本Cを - あなたが持っているどのくらいの経験は関係ありません、あなたはまだ(明らかに)ことによって捕まることができます。 – arcy