Учитывая ресурс classpath, есть ли способ получить объект java.io.File, который имеет / содержит его? - PullRequest
8 голосов
/ 12 октября 2009

Если у меня есть ресурс на пути к классам, я могу нормально загружать его как поток, и даже есть его URL-представление. К сожалению, некоторые реализации Url неправильно реализуют lastModified.

То, что я хотел бы, - это указать путь к чему-либо в пути к классам, а затем преобразовать его в файл, который находится на диске - если он находится в банке, то файл, указывающий на банку, вполне подойдет. Затем я могу получить lastModified из объекта File вместо URL, что будет более полезным.

Ответы [ 2 ]

12 голосов
/ 12 октября 2009

Грубо говоря:

    URL url = this.getClass().getResource(myResource);
    String fileName;
    if (url.getProtocol().equals("file")) {
        fileName = url.getFile();        
    } else if (url.getProtocol().equals("jar")) {
        JarURLConnection jarUrl = (JarURLConnection) url.openConnection();
        fileName = jarUrl.getJarFile().getName();            
    } else {
        throw new IllegalArgumentException("Not a file");
    }
    File file = new File(fileName);
    long lastModified = file.lastModified();

Должен делать то, что вы хотите. Вам нужно будет поймать IOException.

0 голосов
/ 12 октября 2009

Нет. Это не может быть сделано вообще, потому что URL может представлять ресурсы, которые не связаны с файлом. Например, это может быть HTTP, FTP или JNDI и т. Д.

Вы можете проверить протокол и создать файл самостоятельно, если протокол основан на файле, например, "file: // path", "jar: // path! ...".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...