我有一个包含多个路径的文件,例如.
(相对)或/Users/...../
(绝对)。我需要解析相对于包含路径而不是工作目录的文件目录的路径,并创建正确的文件实例。我无法更改Java程序的工作目录,因为这会改变其他组件的行为,我还必须解析几个文件。我不认为public File(String parent, String child)
做我想要的,但我可能错了。文档很混乱。
示例:
file xy located under /system/exampleProgram/config.config has the following content:
.
/Users/Name/file
./extensions
i want to resolve these to:
/system/exampleProgram/
/Users/Name/file
/system/exampleProgram/file/
答案 0 :(得分:1)
所以,我假设您可以访问您打开的文件的路径(如果它是文件描述符或通过正则表达式等,可以通过File.getAbsolutePath()
...)
然后,要将相对路径转换为绝对路径,您可以使用打开的文件创建新的文件描述,如下所示:
File f = new File(myOpenedFilePath);
File g = new File(f, "./extensions");
String absolutePath = g.getCanonicalPath();
当您使用File
对象和String
创建文件时,Java将String
视为相对于作为第一个参数给出的File
的路径。 getCanonicalPath
将摆脱所有多余的.
和..
等。
编辑:正如Leander在评论中所解释的那样,确定路径是否相对的最佳方法(以及是否应该进行转换)是使用file.isAbsolute()
。
答案 1 :(得分:0)
听起来你可能想要像
这样的东西
File fileContainingPaths = new File(pathToFileContainingPaths);
String directoryOfFileContainingPaths =
fileContainingPaths.getCanonicalFile().getParent();
BufferedReader r = new BufferedReader(new FileReader(fileContainingPaths));
String path;
while ((path = r.readLine()) != null) {
if (path.startsWith(File.separator)) {
System.out.println(path);
} else {
System.out.println(directoryOfFileContainingPaths + File.separator + path);
}
}
r.close();
不要忘记getCanonicalFile()
。 (您也可以考虑使用getAbsoluteFile()
)。