这是问题。经过一些串联后,我可能碰巧遇到了这样的字符串
"C:/shared_resources/samples\\import_packages\\catalog.zip"
甚至这个
"C:/shared_resources/samples/subfolder/..\\import_packages\\catalog.zip"
我想拥有一些将这样的字符串转换为具有统一分隔符的路径的代码。
想到的第一个解决方案是使用new File(srcPath).getCanonicalPath()
,但这是棘手的部分。此方法依赖于调用测试的系统。但是,我需要将字符串传递给远程计算机(带有浏览器的Selenium Grid节点),这里和那里的系统分别是Linux和Windows。因此,尝试执行new File("C:/shared_resources/samples\\import_packages\\catalog.zip").getCanonicalPath()
会导致类似"/home/username/ourproject/C:/shared_resources/samples/import_packages/catalog.zip"
的情况。而且使用过时的正则表达式替换似乎也不是一个很好的解决方案。
有没有一种方法可以修剪路径并使分隔符统一(并可能解析..
),而不必尝试隐式地对其进行绝对化?
尝试一下:
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Main {
public static void main(String[] args) throws IOException {
Path path = Paths.get("myFile.txt");
Path absolutePath = path.toAbsolutePath();
System.out.println(absolutePath.toString());
}
}
尝试从Apache FilenameUtils.normalize()
获得FilenameUtils.normalize()
例如,这是您的路径:
Path absolutePath = path.toAbsolutePath().normalize();