2015-03-05 2 views
0

С offical docs, у меня есть небольшая программа:Создание Zip File System Provider в Java

import java.util.*; 
import java.io.File; 
import java.net.URI; 
import java.nio.file.*; 

public class ZipFSPUser { 
    public static void main(String [] args) throws Throwable { 

     Map<String, String> env = new HashMap<>(); 
     env.put("create", "true"); 

     URI uri = (new File(args[0])).toURI(); 
     FileSystem fs = FileSystems.newFileSystem(uri, env); 

    } 
} 

я называю это в терминале Mac как

java -jar app.jar path/to/some/file.zip 

Но это говорит

Компонент пути должен быть '/'

Итак, я решил написать путь сам:

URI uri = URI.create("file://path/to/my/file.zip"); 

А теперь он говорит

java.lang.IllegalArgumentException: Authority компонент, присутствующий

ответ

1

Вы должны проверить URI syntax ,

URI   = scheme ":" hier-part [ "?" query ] [ "#" fragment ] 

hier-part = "//" authority path-abempty 
      /path-absolute 
      /path-rootless 
      /path-empty 

и

Когда власть присутствует, путь должен быть либо пустым или начать с слэш ("/") характер. Когда полномочия отсутствуют, путь не может начинаться с двух символов косой черты («//»).

У вас нет прав. Вам просто нужен абсолютный путь. Ваша схема также неверна. Из ссылки, которую вы опубликовали, вы действительно хотите jar:<url>, как описано here и here. Таким образом,

URI uri = URI.create("jar:file:/path/to/my/file.zip");