Как делают я получаю просто URL банки от банки: URL, содержащий a “!” и определенный файл в банке?

17
задан Lucifer 24 April 2013 в 10:15
поделиться

4 ответа

Это могло бы сделать это, если 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());
34
ответ дан 30 November 2019 в 11:32
поделиться

Не уверенный в любом точном методе, который даст Вам, что Вы хотите, но это должно получить Вас близко:

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 это помогает.

3
ответ дан 30 November 2019 в 11:32
поделиться

Некоторые могли бы полагать, что это было небольшим 'hacky', но он сделает задание в том экземпляре, и я уверен, что он выполнил бы проклятый вид лучше, чем создание всех тех объектов в других предложениях.

String jarUrl = "jar:file:/C:/proj/parser/jar/parser.jar!/test.xml";

jarUrl = jarUrl.substring(jarUrl.indexOf('/')+1, jarUrl.indexOf('!'));
1
ответ дан 30 November 2019 в 11:32
поделиться

Это решение будет обрабатывать пробелы в пути.

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

или с объектом URL, который начинается с:

...
String fileUrl = url.getPath().substring(0, url.indexOf('!'));
...
1
ответ дан 30 November 2019 в 11:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: