如何从jar中获取jar URL:包含"!"的URL 和罐子里的特定文件?

17 java url jar file path

我在运行时获得了一个jar文件URL:

jar:file:///C:/proj/parser/jar/parser.jar!/test.xml
Run Code Online (Sandbox Code Playgroud)

如何将其转换为有效路径:

C:/proj/parser/jar/parser.jar.
Run Code Online (Sandbox Code Playgroud)

使用我已经试过File(URI),getPath(),getFile()是徒劳的.

sta*_*lue 34

如果MS-Windows没有被前导斜杠冒犯,这可能会这样做:

    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());
Run Code Online (Sandbox Code Playgroud)

  • (在Java7中)执行上述代码时,JarURLConnection不会打开JAR文件.它只代表您解析URL. (6认同)

too*_*kit 3

不确定是否有任何确切的方法可以满足您的需求,但这应该可以让您接近:

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]);
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。