3 回答

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
而不是讓所有內(nèi)容都基于字符串,您應(yīng)該使用旨在表示文件系統(tǒng)路徑的類。
如果您使用的是Java 7或Java 8,則應(yīng)強(qiáng)烈考慮使用java.nio.file.Path; Path.resolve可以用于將一條路徑與另一條路徑或字符串組合在一起。該P(yáng)aths輔助類是有用的。例如:
Path path = Paths.get("foo", "bar", "baz.txt");
如果您需要迎合Java-7之前的環(huán)境,則可以使用java.io.File,例如:
File baseDirectory = new File("foo");
File subDirectory = new File(baseDirectory, "bar");
File fileInDirectory = new File(subDirectory, "baz.txt");
如果以后希望將其作為字符串返回,則可以調(diào)用getPath()。確實(shí),如果您真的想模仿Path.Combine,則可以編寫如下內(nèi)容:
public static String combine(String path1, String path2)
{
File file1 = new File(path1);
File file2 = new File(file1, path2);
return file2.getPath();
}

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
在Java 7中,您應(yīng)該使用resolve:
Path newPath = path.resolve(childPath);
盡管NIO2 Path類對(duì)于使用不必要的不同API的File似乎有點(diǎn)多余,但實(shí)際上它更優(yōu)雅,更強(qiáng)大。
請(qǐng)注意,Paths.get()(根據(jù)其他人的建議)并沒有帶有的重載Path,并且這樣做Paths.get(path.toString(), childPath)與并不相同resolve()。從Paths.get()文檔:
請(qǐng)注意,盡管此方法非常方便,但使用它將意味著假定對(duì)默認(rèn)FileSystem的引用并限制了調(diào)用代碼的實(shí)用性。因此,不應(yīng)在旨在靈活重用的庫代碼中使用它。一種更靈活的選擇是使用現(xiàn)有的Path實(shí)例作為錨點(diǎn),例如:
Path dir = ...
Path path = dir.resolve("file");
對(duì)姐妹的作用resolve是優(yōu)異的relativize:
Path childPath = path.relativize(newPath);

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊
自從喬恩(Jon)的原始答案以來,我就已經(jīng)知道了很長時(shí)間,但是我對(duì)OP有類似的要求。
通過擴(kuò)展Jon的解決方案,我提出了以下內(nèi)容,它將采用一個(gè)或多個(gè)路徑段,而您可以將其扔給它。
用法
Path.combine("/Users/beardtwizzle/");
Path.combine("/", "Users", "beardtwizzle");
Path.combine(new String[] { "/", "Users", "beardtwizzle", "arrayUsage" });
在這里為其他有類似問題的人編碼
public class Path {
public static String combine(String... paths)
{
File file = new File(paths[0]);
for (int i = 1; i < paths.length ; i++) {
file = new File(file, paths[i]);
}
return file.getPath();
}
}
添加回答
舉報(bào)