2010-10-05 6 views
-1

Je travaille avec des fichiers (lecture, écriture et copie) dans mon application Java, java.io.File et commons-io étaient parfaits pour ce genre de tâches.Travailler avec des fichiers avec des ancres, quelles sont les options disponibles pour Java?

En ce moment, je peux créer un lien vers HTML de cette façon:

Z:\an absolute\path\to\a\file.html 

Mais, je dois fournir un soutien pour les ancres aussi:

Z:\an absolute\path\to\a\file.html#anchor 

maintenir le obtenu système indépendantiste en utilisant java Fichier .io. Donc, j'ai besoin d'extraire le chemin et l'ancre, je me demande si ce sera aussi facile que de chercher une occurrence forte.

Répondre

1

java.io.File comprend un constructeur qui accepte un URI, qui peut représenter toutes sortes de ressources, inclus les URL et les fichiers locaux (voir le rfc). L'URI répond également à vos exigences de prise en charge des ancres et d'extraction des informations de chemin (via instance.getPath()).

+0

Lorsque vous essayez de convertir java.io.File à l'aide java.net.URI java.io Méthode .File.toURI() le caractère pointu (#) est échappé. Les utilisateurs finaux ne se soucient pas des URI, ils se soucient d'utiliser leurs chemins Windows toujours connus. Dans mon cas, ce ne sera pas la solution, à moins qu'il y ait une façon plus directe de gérer ce problème. – Alexander

+1

Je n'ai pas été clair. Je suggère que vous refactoriez votre code pour utiliser les URI pour toutes les ressources et pour les convertir si nécessaire, en fonction de ce que vous devez faire. De cette façon, les utilisateurs peuvent gérer des chemins locaux, ou des URL, vous avez juste besoin de créer l'objet approprié pour effectuer io. Si votre code ne le rend pas simple, alors je vois votre dilemme. –

0
File f = new File("Z:\\path\\to\\a\\file.html#anchor"); 
String anchor = f.toURL().getRef(); //note: toURL is deprecated 

Si vous regardez la source java, vous verrez qu'il est aussi simple que:

String file = "Z:\\path\\to\\a\\file.html#anchor"; 
int ind = file.indexOf('#'); 
String anchor = ind < 0 ? null: file.substring(ind + 1); 
+0

Cela implique de refactoriser tout le code et de ne pas pouvoir utiliser les méthodes java.io.File courantes. – Alexander