2017-06-09 2 views
0

J'ai créé un fichier Zip sur une instance JimFS FileSystem. Je voudrais maintenant lire le Zip en utilisant l'API Java FileSystem.Exception non trouvée du fournisseur lors de la création d'un FileSystem pour mon fichier zip?

Voici comment je crée le FileSystem:

final FileSystem zipFs = FileSystems.newFileSystem(
    source, // source is a Path tied to my JimFS FileSystem 
    null); 

Cependant, cette renvoie une erreur:

java.nio.file.ProviderNotFoundException: Provider not found

Fait intéressant, le code fonctionne avec la valeur par défaut FileSystem.

  • Que signifie cette erreur? Comment créer mon code postal FileSystem?
+0

Est-ce que 'source' ont le format décrit dans [la documentation] (http://docs.oracle.com/javase/8/docs/technotes/guides/io/fsp/zipfilesystemprovider.html)? – VGR

+0

@VGR 'source' est juste un' Path' (par exemple '/ Library/Caches/example.zip') – sdgfsdh

+0

Est-ce que' FileSystems.newFileSystem (new URI ("jar", source.toUri(). ToString(), null), null) 'travail? – VGR

Répondre

0

Cela fonctionne, mais il semble hacky et surtout je ne suis pas sûr pourquoi cela fonctionne.

public static FileSystem fileSystemForZip(final Path pathToZip) { 
    Objects.requireNotNull(pathToZip, "pathToZip is null"); 
    try { 
     return FileSystems.getFileSystem(pathToZipFile.toUri()); 
    } catch (Exception e) { 
     try { 
      return FileSystems.getFileSystem(URI.create("jar:" + pathToZipFile.toUri())); 
     } catch (Exception e2) { 
      return FileSystems.newFileSystem(
       URI.create("jar:" + pathToZipFile.toUri()), 
       new HashMap<>()); 
     } 
    } 
} 
+1

Ce thread n'est pas sécurisé. – sdgfsdh