2016-08-03 1 views
-1

Lorsque j'essaie d'utiliser le fichier JAR dans le chemin UNC, je trouve que j'ai rencontré un problème. Le constructeur de java.io.file convertira toujours un chemin de fichier UNC en chemin local.Constructeur Java.io.file pour traiter le chemin du fichier UNC

Par exemple, j'essaie

String dirStr = "file:\\\\dir1\dir2\file.jar!Myclass"; 
File ff = new File(dirStr); 
System.out.println(ff.toString()); 

Je vais obtenir une sortie comme: file:\dir1\dir2\file.jar!Myclass. Mais ce que je m'attends à obtenir est file:\\dir1\dir2\file.jar!MyClass.

J'ai essayé d'ajouter plus de barres obliques dans dirStr, mais cela ne peut pas fonctionner. Parce que dans le java.io.file, il appellera méthode pour supprimer les barres obliques dupliquées. J'ai essayé d'utiliser le URI pour créer le ff. Mais la sortie sera \dir1\dir2\file.jar!Myclass, ce qui n'est pas disponible pour utiliser le fichier JAR avec succès. Je pense que la forme de JAR doit commencer par le protocole file: pour utiliser la chaîne se terminant par ! dans la chaîne ci-dessus \dir1\dir2\file.jar!Myclass.

est-il un moyen peut new File() pour obtenir le chemin de File, à savoir ff, comme file:\\dir1\dir2\file.jar!MyClass.

+0

Je pense que le préfixe 'file:' est généralement utilisé pour les chemins locaux. Un chemin UNC n'est pas un chemin local. Essayez sans le préfixe 'file:', c'est-à-dire \\ dir1 \ dir2 \ fichier.jar! MyClass'. Vous pouvez également essayer avec des barres obliques, '//dir1/dir2/file.jar! MyClass' – janos

+0

Pourquoi pensez-vous que vous devez fournir une URL à un constructeur' File'? Vous ne pouvez pas, et vous ne devez pas. Pas clair ce que vous demandez vraiment ici. – EJP

+0

Parce que j'ai besoin d'utiliser le fichier JAR dans le chemin UNC. Lorsque votre java CLASSPATH inclut le chemin UNC distant, vous rencontrerez ce problème. Il va analyser le fichier JAR comme 'dirStr'. –

Répondre

0

Comme votre chaîne d'entrée dir est de type UNC, je pense que vous devriez utiliser Java URI.
code Exemple:

URI uri = new URI(dirStr); 
System.out.println(uri.toString()); // If you want to get the path as URI 
File ff = new File(uri.getPath()); // If you want to access the file. 


L'autre meilleure façon utilise le chemin:

URI uri = new URI(dirStr); 
Path path = Paths.get(uri); // Or directly Path path = Paths.get(dirStr); 
File ff = path.toFile(); // << your file here 
path.toUri(); // << your uri path here 
+0

J'ai essayé ce code, le 'ff' sera comme ceci \\ dir1 \ dir2 \ fichier.jar! MyClass' sans' fichier: '. –

+0

Donc vous allez juste 'uri.toString()'. – Minh

+0

J'ai modifié le code de l'exemple, veuillez le vérifier. – Minh

0

Le constructeur File(String) prend un chemin, pas une URL. Supprimez la pièce file: et utilisez deux barres obliques inverses pour chacune d'entre elles dans le nom de fichier réel, afin de satisfaire aux règles d'échappement du compilateur. Ou utilisez le nombre correct de barres obliques.

+0

En fait, je n'ai pas utilisé d'URL, mais d'URI. –

+0

Et si je supprime le 'fichier:', il ne sera pas en mesure de trouver le fichier JAR. Je suppose que c'est dû à un '!' Après la chaîne '.jar'. –

+0

Si vous devez avoir 'file:' vous ne devriez pas utiliser 'File'. Les deux ne vont pas ensemble, comme je l'ai déjà dit. – EJP