2014-11-21 47 views
1

我有一個奇怪的情況,我想對JFileChooser中用戶輸入的文件名值進行測試。從JFileChooser獲取用戶輸入的文件名

.getSelectedFile()函數根據文件名的用戶輸入值和不是我想要的目錄返回一個文件。

作爲一個例子: 在JFileChooser當前目錄可能是 「C:\ A \ B \ C」 用戶輸入的值可以是 「d。\ E \ f.txt」

.getSelectedFile( )返回 「C:\ A \ b \ C \ d。\ E \ f.txt」。 .getSelectedFile()getName()返回 「f.txt」

而我想要的東西,像.getInputtedFile()返回「d \ e \ f.txt」

有沒有像這樣的可用解決方案,還是我必須擴展JFileChooser?

+0

這樣做的原因是因爲我們希望用戶能夠輸入文件名如: server1的\目錄\ xx.dat 服務器2 \ xx.dat 這裏如果我們發現他們手動輸入這些名稱(而不是一個目錄發生的那個名稱),我們將使用它作爲「絕對路徑」並以我們自己的方式處理它。 – Wassa 2014-11-21 13:33:59

回答

1

輸入值「d \ e \ f.txt」是一個相對路徑。 .getSelectedFile()返回「C:\ a \ b \ c \ d \ e \ f.txt」是邏輯,因爲指定的路徑被追加到當前目錄。如果你指定一個絕對路徑,肯定它不會被連接。

+0

我知道。 我在問是否有方法來獲取用戶輸入的內容。 – Wassa 2014-11-21 13:32:33

+1

這是沒有意義的。文件選擇器總是應該返回所選文件的絕對路徑。用戶輸入的內容並不那麼重要。絕對文件路徑對您來說應該足夠了。 – grozandrei 2014-11-21 13:40:11

0

據我所知,沒有任何構建可以從選定的文件中檢索相對路徑(但我可能是錯的)。

但是你可以通過創建一個像這樣的方法幫助自己:

public static String getRelativeSubdirectory(final File file) { 
    final File currentFolder = new File(""); 
    if (file.getAbsolutePath().startsWith(currentFolder.getAbsolutePath())) { 
     return file.getAbsolutePath().substring(currentFolder.getAbsolutePath().length() + 1); 
    } 
    return file.getAbsolutePath(); 
} 

這個方法接受一個File參數,如果選擇的文件是在current文件夾中的子目錄返回String與相對路徑。如果不是,它將返回給定文件的絕對路徑。所以這個方法不會返回像這樣的相對路徑。

此解決方案與此answer有很多相似之處。