How to get a clean absolute file path in Java regardless of OS?
Solution 1
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());
}
}
Solution 2
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.
Related videos on Youtube
Actine
Updated on October 10, 2020Comments
-
Actine over 3 years
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 donew 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?-
Andrew Thompson about 11 yearsTry something like..
File f = new File("C:/shared_resources/samples\\import_packages\\catalog.zip"); System.out.println(f.toURI().toURL());
-
-
koppor over 6 yearsThis leaves a
.
in there:.
getsD:\git-repositories\winery\winery\.
instead ofD:\git-repositories\winery\winery
. Addingnormalize()
at the end also removes the final.
. -
stippi over 4 yearstoAbsolutePath() does not eliminate redundant relative sections.