简体   繁体   中英

How to get a clean absolute file path in Java regardless of OS?

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?

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());
    }
}

for example here is your path:

String jarName = "C:/shared_resources/samples\\import_packages\\catalog.zip"
jarName.replaceAll("/", "\\");
jarName.replaceAll("..", "/");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM