2011-08-31 61 views
3

想象一下,我有一個「基礎」路徑對象,表示一個目錄,還有一個「相對」路徑對象表示基礎內的某個文件。我可以編寫兩個文件路徑而不需要toString()方法嗎?

我希望這些代碼看起來有點像

AbsolutePath base = new AbsolutePath("/tmp/adirectory"); 
RelativePath relativeFilePath = new RelativePath("filex.txt"); 
AbsolutePath absoluteFile = base.append(relativeFilePath); 

但是Java API中(我還不知道非常好),我發現只有File,與我所能做的無非

更好
File base = new File("/tmp/adirectory"); 
File relativeFilePath = new File("filex.txt"); 
File absoluteFile = base.toString() 
        + File.separator 
        + relativeFilePath.toString(); 

有沒有更好的方法?

回答

8

你可以用java.io.File得到最接近的是the File(File, String) constructor

File base = ...; 
File relative = ...; 
File combined = new File(base, relative.toString()); 

如果你可以使用Java 7中引入了Path類,那麼你可以使用the resolve() method,這不正是你想要什麼:

Path base = ...; 
Path relative = ...; 
Path combined = base.resolve(relative); 

請注意,如果base不是絕對路徑,那麼combined也不是絕對的!如果您需要絕對路徑,那麼對於File,您將使用getAbsoluteFile(),對於Path,則使用toAbsoutePath()

4

是的。 new File(base, "filex.txt")將在目錄庫中創建文件名「filex.txt」。

沒有必要創建relativeFilePath只有相對名稱的文件實例,如果你想要做的是使其相對於另一個目錄而不是當前目錄。

1

怎麼樣:

File base = new File("/tmp/adirectory"); 
File absoluteFile = new File(base, "filex.txt"); 

編輯:@JB來不及Nizet最後一刻落敗。我在後...

1

File類有一些構造可能會感興趣的你:

File base = new File("/tmp/adirectory"); 
File absolute = new File(base, "filex.txt"); 
File absolute2 = new File("/tmp/adirectory", "filex.txt"); 
相關問題