Nie wiesz jakiejkolwiek dokładnej metody, które dadzą Ci to, co chcesz, ale to powinno się zamknąć:
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]);
}
}
Nadzieja to pomaga.
bardzo blisko, ale korzystanie z split() jest zbyt niski poziom parsowania dla mnie. Implementacja adresu URL Sun wydaje się nie zapewniać metod radzenia sobie z tą dziwną składnią jarfile.jar! Path/to/specific/file dla dziwnych adresów URL słoika firmy Sun; cały shebang (kalambur przeznaczony) jest zwracany przez getPath(). Ale JarURLConnection, jak wspomniano w starblue, wydaje się działać, chociaż tylko przez otwarcie słoika. – skiphoppy