Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting absolute path of a file loaded via classpath

Tags:

java

I have this very specific need wherein a file is loaded from classpath and the same is used in another module which needs it's absolute path. What are the possible ways an absolute path of a file loaded via classpath can be deduced ?

like image 919
Santosh Avatar asked Nov 15 '11 13:11

Santosh


People also ask

How do I find the absolute path of a path?

The function getAbsolutePath() will return the absolute (complete) path from the root directories. If the file object is created with an absolute path then getPath() and getAbsolutePath() will give the same results.

Which method returns absolute path of the file?

getAbsolutePath() : This file path method returns the absolute path of the file. If File is created with absolute pathname, it simply returns the pathname. If the file object is created using a relative path, the absolute pathname is resolved in a system-dependent way.

What is getAbsolutePath in Java?

Java For Testers getAbsolutePath() is used to obtain the absolute path of a file in the form of a string. This method requires no parameters.


2 Answers

Use ClassLoader.getResource() instead of ClassLoader.getResourceAsStream() to get a URL. It will be, by definition, always absolute.

You can then use openConnection() on the URL to load the content. I'm often using this code:

public ... loadResource(String resource) {
    URL url = getClass().getClassLoader().getResource(resource);
    if (url == null) {
        throw new IllegalArgumentException("Unable to find " + resource + " on classpath);
    }

    log.debug("Loading {}", url); // Will print a file: or jar:file: URL with absolute path
    try(InputStream in = resource.openConnection()) {
        ...
    }
}
like image 102
Aaron Digulla Avatar answered Oct 10 '22 01:10

Aaron Digulla


use

classLoader.getResource("/path/in/classpath").getFile();

See Also

  • API Doc
like image 21
jmj Avatar answered Oct 10 '22 00:10

jmj