2011-08-31 76 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"); 
相关问题