我有一个使用 JFileChooser 选择目录的应用程序。在这个应用程序中,我不想尝试处理符号链接,我想在多个平台上运行。因此,代码尝试确定所选文件是否为符号链接,如果是,则显示错误对话框。
这是从 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;
}
这是我用来确定所选文件是否为符号链接的代码:
public static boolean isSymbolic(File f)
{
try
{
String absolute = f.getAbsolutePath();
String canonical = f.getCanonicalPath();
return !(absolute.equals(canonical));
}
catch (IOException ioe)
{
return false;
}
}
在 Windows 7 上:如果用户使用鼠标选择一个给定的目录,这可以正常工作。如果用户在文件名文本框中键入相同的目录名,则第二个代码片段表明绝对路径和规范路径不同。用户是否输入尾部反斜杠并不重要。
当我在'return'语句行的调试器中停止这个并查看两个字符串的详细信息时,绝对路径字符串的哈希值是一个很大的负数,而规范字符串的哈希值为0。我不知道为什么会这样,实际上想知道这是否是(eclipse)调试器的怪癖。
谁能告诉我为什么会有这种差异?