Java : Fichier.tour().toURL() sur le fichier Windows
Le système que je suis en cours d'exécution sur Windows XP, avec le JRE 1.6.
Je fais ceci :
public static void main(String[] args) {
try {
System.out.println(new File("C:\\test a.xml").toURI().toURL());
} catch (Exception e) {
e.printStackTrace();
}
}
et j'obtiens ceci : file:/C:/test%20a.xml
Comment se fait-l'URL n'a pas de deux barres obliques en avant de la C:
? Je m'attendais à file://C:...
. Est-ce un comportement normal?
EDIT :
De code source Java : java.net.URLStreamHandler.toExternalForm(URL)
result.append(":");
if (u.getAuthority() != null && u.getAuthority().length() > 0) {
result.append("//");
result.append(u.getAuthority());
}
Il semble que l'Autorité de la partie d'une URL de fichier est null ou vide, et donc la double barre oblique est ignorée. Alors, quelle est l'autorité de la partie de l'URL et est-il vraiment absent du fichier de protocole?
J'espère vraiment que vous mettre des espaces avant
La version de Windows êtes-vous sur? En fait n'a pas d'importance si vous pouvez l'analyser de retour avec la nouvelle URL(String).
eh bien, c'questions si je suis de l'analyse du résultat à autre chose que l'URL(String), ce qui je ne.
De manière amusante, la javadoc de java.net.URL fait toujours référence à l'original NCSA Mosaic pages d'aide, qui, sans surprise, est un lien mort. Je pense que je pourrais remplir un rapport de bogue....
pas moi, mais une autre bibliothèque.
{
s...La version de Windows êtes-vous sur? En fait n'a pas d'importance si vous pouvez l'analyser de retour avec la nouvelle URL(String).
eh bien, c'questions si je suis de l'analyse du résultat à autre chose que l'URL(String), ce qui je ne.
De manière amusante, la javadoc de java.net.URL fait toujours référence à l'original NCSA Mosaic pages d'aide, qui, sans surprise, est un lien mort. Je pense que je pourrais remplir un rapport de bogue....
pas moi, mais une autre bibliothèque.
OriginalL'auteur glmxndr | 2009-07-15
Vous devez vous connecter pour publier un commentaire.
C'est une question intéressante.
Tout d'abord: j'obtiens les mêmes résultats sur RE6. J'ai même pas que quand je lop off le toURL ().
RFC2396 ne nécessite pas réellement de deux barres obliques. Conformément à l'article 3:
Après avoir dit que, RFC2396 a été remplacé par RFC3986, qui stipule
Donc, là vous allez. Depuis fichier Uri n'ont pas l'autorité segment, qu'il leur est interdit de commencer par //.
Cependant, que la RFC n'est pas venu jusqu'en 2005, et Java références RFC2396, donc je ne sais pas pourquoi c'est suite à cette convention, ainsi que l'Url de fichier avant de le nouveau RFC ont toujours eu deux barres obliques.
Et l'exemple à la fin de la section 1.1 de RFC3986 a cet exemple : file:///etc/hosts.
J'ai remarqué que, trop. Parfois, je pense qu'ils devraient juste faire le specs plus facile à lire.
la Section 3.2.2 de la RFC 3986 clarifie cela en disant que le
authority
peut être vide: "Si le schéma d'URI définit une valeur par défaut de l'hôte, alors que par défaut s'applique lorsque l'hôte de la sous-composant est pas défini ou lorsque le nom de domaine enregistré est vide (de longueur zéro). Par exemple, le "fichier" schéma d'URI définie, de sorte qu'aucune autorité, un vide de l'hôte, et "localhost" signifient tous la fin de l'ordinateur de l'utilisateur, tandis que le "http" régime considère comme un manque d'autorité ou de vide hôte non valide."Ouais l'URL RFC1738 semble contredire ce que GhiOm dit: voir aussi superuser.com/questions/352133. Notez que certaines bibliothèques attendre le triple slash version, comme par exemple la Subversion Java liaisons JavaHL de l'API, de sorte que vous avez à faire manuellement
"file://" + myFile.toURI().getRawPath()
OriginalL'auteur Powerlord
De réponse pourquoi vous pouvez avoir à la fois:
RFC3986 (3.2.2. D'accueil) états:
De sorte que le "fichier" régime se traduit par
file:///path/file
de disposer d'un contexte de la fin-l'ordinateur de l'utilisateur, même si l'autorité est une hôte vide.OriginalL'auteur rbeede
Autant que de l'utiliser dans un navigateur, il n'a pas d'importance. J'ai souvent vu
file:///...
mais un, deux ou trois '/'. Cela me fait penser (sans regarder la documentation de java) qu'il serait un comportement normal.3 barres obliques du sens sur un UNIX-système de type; la troisième barre oblique est le répertoire racine. file:///etc/passwd est le fichier /etc/passwd.
OriginalL'auteur Jeremy Cron