Reputation: 2917
Here's the problem. After some concatenations I may happen to have a string like this
"C:/shared_resources/samples\\import_packages\\catalog.zip"
or even this
"C:/shared_resources/samples/subfolder/..\\import_packages\\catalog.zip"
I want to have some code that will convert such string into a path with uniform separators.
The first solution that comes to mind is using new File(srcPath).getCanonicalPath()
, however here's the tricky part. This method relies on the system where the tests are invoked. However I need to pass the string to a remote machine (Selenium Grid node with a browser there), and the systems here and there are Linux and Windows respectively. Therefore trying to do new File("C:/shared_resources/samples\\import_packages\\catalog.zip").getCanonicalPath()
results in something like "/home/username/ourproject/C:/shared_resources/samples/import_packages/catalog.zip"
. And using blunt regex replacement doesn't seem a very good solution too.
Is there a way just to prune the path and make delimiters uniform (and possibly resolving ..
's) without trying to implicitly absolutize it?
Upvotes: 27
Views: 42161
Reputation: 925
You can use:
Path absolutePath = path.toAbsolutePath().normalize();
... at least to eliminate the redundant relative sections. As the documentation for normalize() mentions, in case that an eliminated node of the path was actually a link, then the resolved file may be different, or no longer be resolvable.
Upvotes: 8
Reputation: 1102
Try with this:
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());
}
}
Upvotes: 31
Reputation: 109
for example here is your path:
String jarName = "C:/shared_resources/samples\\import_packages\\catalog.zip"
jarName.replaceAll("/", "\\");
jarName.replaceAll("..", "/");
Upvotes: -4