如何动态更新绝对路径

时间:2015-12-15 11:11:57

标签: java string absolute-path

给出下面的传入路径,例如

C:\cresttest\parent_3\child_3_1\child_3_1_.txt

如何在上述路径之间更新和添加新目录以构建以下结果

C:\cresttest\NEW_PATH\parent_3\child_3_1\child_3_1_.txt

目前我使用多个subString来识别传入路径,但传入路径是随机和动态的。使用子字符串并放置我的新路径需要更多的代码行或不必要的处理,是否有任何API或方法可以在绝对路径之间轻松更新和添加我的新目录?

4 个答案:

答案 0 :(得分:4)

使用java.nio.file.Path,您可以执行以下操作:

Path incomingPath = Paths.get("C:\\cresttest\\parent_3\\child_3_1\\child_3_1_.txt");
//getting C:\cresttest\, adding NEW_PATH to it
Path subPathWithAddition = incomingPath.subpath(0, 2).resolve("NEW_PATH");
//Concatenating C:\cresttest\NEW_PATH\ with \parent_3\child_3_1\child_3_1_.txt
Path finalPath = subPathWithAddition.resolve(incomingPath.subpath(2, incomingPath.getNameCount()));

然后,您可以通过调用finalPath.toUri()

来获取路径URI

注意:这不依赖于路径中的任何名称,但这取决于目录深度,您可以在subpath调用中编辑。

注意2:你可能会减少你对一个Path实例的数量,我做了三个以提高可读性。

答案 1 :(得分:1)

你可以在第二个反斜杠上插入一个路径,如下所示:

String path="C:\\cresttest\\parent_3\\child_3_1\\child_3_1_.txt";

final String slash="\\\\";
path=path.replaceFirst(slash+"[^"+slash+"]+"+slash, "$0NEW_PATH"+slash);

System.out.println(path);

Demo

这会将第一次出现的\\arbitrarydirname\\替换为自身(通过$0引用),后跟NEWPATH\\

分隔符的源代码表示看起来有点奇怪("\\\\"),因为在Java String文字中编写正则表达式时,反斜杠必须转义两次。

如果您希望操作与平台无关,则可以用

替换该行
final String slash = Pattern.quote(FileSystems.getDefault().getSeparator());

当然,输入path也必须采用正确的平台格式。

答案 2 :(得分:0)

您可以使用这个简单的正则表达式替换:

path = path.replaceAll(":.\\w+", "$0\\\\NEW_PATH");

如果您使用/代替\作为路径分隔符,则代码会更简单。例如,比较:

String path = "C:\\cresttest\\parent_3\\child_3_1\\child_3_1_.txt";
path = path.replaceAll(":.\\w+", "$0\\\\NEW_PATH");

String path = "C:/cresttest/parent_3.child_3_1/child_3_1_.txt";
path = path.replaceAll(":.\\w+", "$0/NEW_PATH");

Java可以在Windows上处理任何分隔符,但在Linux上只有/可用,因此为了使代码可移植且更具可读性,请使用/

答案 3 :(得分:0)

只是为了好玩,不确定这是否是你想要的

public static String addFolderToPath(String originalPath, String newFolderName, int position){
    String returnString = "";
    String[] pathArray = originalPath.split("\\\\");

    for(int i = 0; i<pathArray.length; i++){
        returnString = returnString.concat(i==position ? "\\" + newFolderName : "");
        returnString = returnString.concat(i!=0 ? "\\" + pathArray[i] : "" + pathArray[i]);

    }
    return returnString;  
}

呼叫:

System.out.println(addFolderToPath("c:\\abc\\def\\ghi\\jkl", "test", 1));
System.out.println(addFolderToPath("c:\\abc\\def\\ghi\\jkl", "test", 2));
System.out.println(addFolderToPath("c:\\abc\\def\\ghi\\jkl", "test", 3));
System.out.println(addFolderToPath("c:\\abc\\def\\ghi\\jkl", "test", 4));

执行命令

c:\test\abc\def\ghi\jkl
c:\abc\test\def\ghi\jkl
c:\abc\def\test\ghi\jkl
c:\abc\def\ghi\test\jkl