Hi, I get a jar file url at runtime as:
jar:file:/C:/proj/parser/jar/parser.jar!/test.xml
How can this be converted to a valid path as:
C:/proj/parser/jar/parser.jar.
I have already tried using File(URI), getPath(), getFile() in vain...
Hi, I get a jar file url at runtime as:
jar:file:/C:/proj/parser/jar/parser.jar!/test.xml
How can this be converted to a valid path as:
C:/proj/parser/jar/parser.jar.
I have already tried using File(URI), getPath(), getFile() in vain...
Not sure of any exact method that will give you what you want, but this should get you close:
import static org.junit.Assert.assertEquals;
import java.net.URL;
import org.junit.Test;
public class UrlTest {
@Test
public void testUrl() throws Exception {
URL jarUrl = new URL("jar:file:/C:/proj/parser/jar/parser.jar!/test.xml");
assertEquals("jar", jarUrl.getProtocol());
assertEquals("file:/C:/proj/parser/jar/parser.jar!/test.xml", jarUrl.getFile());
URL fileUrl = new URL(jarUrl.getFile());
assertEquals("file", fileUrl.getProtocol());
assertEquals("/C:/proj/parser/jar/parser.jar!/test.xml", fileUrl.getFile());
String[] parts = fileUrl.getFile().split("!");
assertEquals("/C:/proj/parser/jar/parser.jar", parts[0]);
}
}
Hope this helps.
This might do it, if MS-Windows is not offended by a leading slash:
final URL jarUrl =
new URL("jar:file:/C:/proj/parser/jar/parser.jar!/test.xml");
final JarURLConnection connection =
(JarURLConnection) jarUrl.openConnection();
final URL url = connection.getJarFileURL();
System.out.println(url.getFile());
Some might consider this to be a bit 'hacky', but it'll do the job in that instance and i'm sure it'd perform a damn sight better than creating all those objects in the other suggestions.
String jarUrl = "jar:file:/C:/proj/parser/jar/parser.jar!/test.xml";
jarUrl = jarUrl.substring(jarUrl.indexOf('/')+1, jarUrl.indexOf('!'));
This solution will handle spaces in the path.
String url = "jar:file:/C:/dir%20with%20spaces/myjar.jar!/resource";
String fileUrl = url.substring(4, url.indexOf('!'));
File file = new File(new URL(fileUrl).toURI());
String fileSystemPath = file.getPath();
or with a URL object to begin with:
...
String fileUrl = url.getPath().substring(0, url.indexOf('!'));
...