2010-11-30 35 views
0

我試圖做一個簡單的程序,其中包含瀏覽本地文件系統的功能。getCanonicalFile和getAbsoluteFile返回當前(項目)目錄而不是預期的目錄

但是,我直接輸入地址時遇到了問題。

public void setWorkingDirectory(File newDir) 
{ 
    try 
    { 
     //try to eliminate redundancy 
     this.workingDir = newDir.getCanonicalFile(); 
    } 
    catch (IOException e) 
    { 
     this.workingDir = newDir; 
    } 
} 

我需要在屏幕上顯示絕對路徑。所以我用getCanonicalFile()。除了當我輸入「D:」時,workingDir將被設置爲Eclipse中的當前項目目錄(我認爲它應該是獨立執行時的當前目錄,例如「D:\ EclipseWorkspace \ workspace \ FTPClient」 )但File newDir包含完全相同的路徑(「D:」)(我追蹤它)。

如果我輸入「C:」或「D:\」,那麼一切都很好。我無法在互聯網上找到關於此的任何信息。任何人都可以告訴我這裏發生了什麼,以及如何解決問題?

在此先感謝。

編輯:我在使用Java 6的Windows XP SP3上工作(如果有的話)。

+0

雖然你正在使用Windows,但用正斜槓替換所有反斜槓。「\」`可能會在它之後轉義一個字符,而您不想要。 – darioo 2010-11-30 09:11:31

+0

感謝您的評論。是個好主意。但我認爲在我的情況下沒有必要,因爲路徑不是硬編碼的。 – LLS 2010-11-30 09:17:50

+0

我已經上傳了一個解釋克里斯所說的答案。 – 2010-11-30 09:22:32

回答

1

路徑命令

D: 

指示改變到當前選擇的目錄磁盤上d

鑑於

D:\ 

指示改變到磁盤d根目錄

這是基本的Windows,您將在(CMD)控制檯窗口中獲得相同的結果。

如果確實存在問題,您需要查看文件名並查看它是否以File.separator結尾,如果不是,請追加一個。

0

不知道如何解釋它,getCanonicalFile()使用getCanonicalPath()這實質上是調用FileSystem.canonicalize(String path)方法(這是一個抽象方法)。

在Windows中,java.io.Win32FileSystem.canonicalize(String path)(延伸java.io.FileSystem)稱,從本質上講,的2種本地方法之一:

protected native String canonicalize0(String path) 

OR

protected native String canonicalizeWithPrefix0(String canonicalPrefix, String pathWithCanonicalPrefix) 

所以,克里斯說,這是基本Windows功能。

相關問題