Bonjour ,

Comme vous l'avez devinez j'ai un problème !
Je suis actuellement en train de migrer du code vers NIO2.

En suivant en suivant les conseils du cours Java de JM Doudoux (merci à lui ) pour créer un nouveau fichier zip.

J'ai besoin d'une URI :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
private static FileSystem creerZipFileSystem(Path zipFile) throws IOException {
    final URI uri = URI.create("jar:file:" + zipFile.toUri().getPath());
    final Map<String, String> env = new HashMap<>();
    env.put("create", "true");
    return FileSystems.newFileSystem(uri, env);
}
J'ai donc un bloque de teste qui appelle cette fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
String filePath = "C:\\Mon\\Chemin\\Avec des\\espaces\\Vers le\\FichierACree.zip";
creerZipFileSystem(Paths.get(outputFakeVendorFile));
mais dans ce cas la je me ramasse un jolie erreure du type
Illegal character in opaque part at index 28: jar:file:/C:/Mon/Chemin/Avec des/espaces/Vers le/FichierACree.zip
J'ai donc tenter une approche latéralisante du problème (effectivement cette phrase n'as aucun sens)

en utilisant le constructeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
URI(String scheme, String host, String path, String fragment)
ce qui donne le code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
private static FileSystem creerZipFileSystem(Path zipFile) throws IOException {
    final URI uri = new URI("jar:file", null, zipFile.toUri().getPath().toString(), null);
    final Map<String, String> env = new HashMap<>();
    env.put("create", "true");
    return FileSystems.newFileSystem(uri, env);
}
et cette fois c'est au niveau du return de ma fonction «creerZipFileSystem» que je me heurte à l'erreure:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Illegal character in path at index 24: file:/C:/Mon/Chemin/Avec des/espaces/Vers le/FichierACree.zip
je pense donc que ça viens d'une mauvaise utilisation de ma part des URI*mais c'est la première fois que j'en utilise, et malgres mes divers autres tentative je ne suis arrivé à rien.

Donc si vous avez des conseil n'hésitez pas

D'avance merci bien