Java解析具有不同工作目录

时间:2016-09-25 20:44:06

标签: java file io

我有一个包含多个路径的文件,例如.(相对)或/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/

2 个答案:

答案 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())。