Existe-t-il un équivalent Java pour System.IO.Path.Combine()
C # /. NET? Ou tout code pour accomplir cela?
Cette méthode statique combine une ou plusieurs chaînes dans un chemin.
Existe-t-il un équivalent Java pour System.IO.Path.Combine()
C # /. NET? Ou tout code pour accomplir cela?
Cette méthode statique combine une ou plusieurs chaînes dans un chemin.
Réponses:
Plutôt que de tout garder basé sur des chaînes, vous devez utiliser une classe conçue pour représenter un chemin d'accès au système de fichiers.
Si vous utilisez Java 7 ou Java 8, vous devriez fortement envisager d'utiliser
java.nio.file.Path
;Path.resolve
peut être utilisé pour combiner un chemin avec un autre ou avec une chaîne. LaPaths
classe d'assistance est également utile. Par exemple:Si vous devez gérer des environnements pré-Java-7, vous pouvez utiliser
java.io.File
, comme ceci:Si vous le souhaitez plus tard sous forme de chaîne, vous pouvez appeler
getPath()
. En effet, si vous vouliez vraiment imiterPath.Combine
, vous pourriez simplement écrire quelque chose comme:la source
path2
(en ignorantpath1
) sipath2
est un chemin absolu. La version Java supprimera le premier/
ou le\
traitera comme un chemin relatif.File.getCanonicalPath
.File
en C # si vous le souhaitez. (Je suppose que vous voulez dire que l'existence deFile
est un avantage, avec lequel je suis d'accord.)Dans Java 7, vous devez utiliser
resolve
:Bien que la classe NIO2 Path puisse sembler un peu redondante pour File avec une API inutilement différente, elle est en fait subtilement plus élégante et robuste.
Notez que
Paths.get()
(comme suggéré par quelqu'un d'autre) n'a pas de surcharge en prenant unPath
, et fairePaths.get(path.toString(), childPath)
n'est PAS la même chose queresolve()
. De laPaths.get()
documentation :La fonction sœur
resolve
est l'excellenterelativize
:la source
La principale réponse est d'utiliser des objets File. Cependant Commons IO possède une classe FilenameUtils qui peut faire ce genre de chose, comme la méthode concat () .
la source
Je sais que c'est longtemps depuis la réponse originale de Jon, mais j'avais une exigence similaire à celle de l'OP.
En étendant la solution de Jon, j'ai proposé ce qui suit, qui prendra un ou plusieurs segments de chemin prend autant de segments de chemin que vous pouvez lui lancer.
Usage
Code ici pour les autres personnes ayant un problème similaire
la source
approche indépendante de la plate-forme (utilise File.separator, c'est-à-dire que will works dépend du système d'exploitation sur lequel le code s'exécute:
la source
Pour améliorer la réponse de JodaStephen, Apache Commons IO a FilenameUtils qui le fait. Exemple (sous Linux):
Il est indépendant de la plate-forme et produira les séparateurs dont votre système a besoin.
la source
Voici une solution qui gère plusieurs parties de chemin et conditions de bord:
la source
Si vous n'avez pas besoin de plus de chaînes, vous pouvez utiliser com.google.common.io.Files
obtenir
la source
Tard dans la soirée peut-être, mais je voulais partager mon point de vue à ce sujet. J'utilise un modèle Builder et autorise les
append
appels chaînés de manière pratique . Il peut facilement être étendu pour prendre également en charge le travail avec desPath
objets.Exemple d'utilisation:
Le résultat
absolute
contiendra quelque chose comme:ou peut-être même:
la source
Cela fonctionne également en Java 8:
la source
Cette solution offre une interface pour joindre des fragments de chemin à partir d'un tableau String []. Il utilise java.io.File.File (String parent, String child) :
Ensuite, vous pouvez simplement faire:
Retour:
la source