2009-04-22 9 views
11

Pourquoi la fonction java.io.File.toURL() dépréciée? Je dois passer une URL à Toolkit.createImage() qui accepte un objet URL. Javadoc me recommande d'utiliser File.toURI().toURL(). Cependant:File.toURL() déconseillé?

C:\Documents and settings\Administrator\...

devient:

C:\Documents%20and%20settings\Administrator\...

qui est évidemment un emplacement de fichier non valide. J'ai trouvé File.toURL() pour créer des URL sans échapper, mais il est obsolète. Bien que cela fonctionne, j'ai peur d'utiliser des fonctions obsolètes. Qu'est-ce qu'une méthode qui n'est pas obsolète qui fait la même chose?

EDIT: En ce moment, mon code ressemble à:

spriteImage1 = tkit.createImage(new File("./images/sprite1.png").getCanonicalFile().toURL()); 

EDIT: Je dois créer une image à partir d'un dossier en dehors de mon fichier .jar. J'ai besoin d'un emplacement relatif ("./images/sprite1.png"). La méthode createImage (String) lance une exception lorsque j'essaie de lui donner le chemin relatif.

+1

Ce n'est pas du tout évident pour moi pourquoi vous pensez que la version échappée est fausse. Certes, je m'attendrais probablement à + au lieu de% 20, mais j'espère que ça marchera toujours. –

+4

La seconde ne devrait-elle pas être un fichier: /// C:/Documents% 20and% 20settings/Administrator/...? – Powerlord

+0

En fait la deuxième version me donne une exception quand elle est passée à createImage() alors que la première fonctionne bien. Et oui c'est le fichier: /// ... – Lucky

Répondre

14

Il ne gère pas correctement les caractères spéciaux comme par this bug.

5

Pourquoi n'utilisez-vous pas simplement la fonction createImage que takes a String nom de fichier à la place?

1

Vous pouvez envisager d'utiliser ImageIO comme une alternative. .

27

Utilisation: URL url2 = file.toURI() toURL();

+1

Ce n'est pas la même chose, car les espaces sont codés en URL. – user2340939

0

Je pense que vous devez écrire l'url de cette façon

C:/Documents and Settings/administrateur/...

pas dans ce

C: \ Documents et paramètres \ Administrateur ...

3

Je pense que le droit t réponse à cette question est celle qui est exposée dans ce lien http://www.jguru.com/faq/view.jsp?EID=1280051

Comme exposé dans le lien ci-dessus, la bonne façon de le faire est:

// Supposing f is the referenced file in code and we want to 
// get an URL instance without deprecation warnings. 
URL externalForm = f.toURI().toURL(); 

Il n'y a pas de prise pour MalformedURLException que la question porte sur dépréciation de la méthode file.toURL().

Espère que cela aide.