我可以在不需要其toString()方法的情况下编写两个文件路径吗?

时间:2011-08-31 14:18:56

标签: java file path directory

想象一下,我有一个'基础'路径对象,表示一个目录,一个'相对'路径对象表示基础内的某个文件。

我希望代码看起来有点像

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();

有更好的方法吗?

4 个答案:

答案 0 :(得分: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()

答案 1 :(得分:4)

是。 new File(base, "filex.txt")将在目录库中创建文件名“filex.txt”。

如果您想要做的是使其相对于当前目录而不是另一个目录,则无需仅使用相对名称创建relativeFilePath文件实例。

答案 2 :(得分:1)

怎么样:

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

编辑:太晚了@JB Nizet在帖子里嘲笑我......

答案 3 :(得分:1)

File类包含一些您可能感兴趣的构造函数:

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