¿Hay un equivalente de Java para System.IO.Path.Combine()
en C # /. NET? ¿O algún código para lograr esto?
Este método estático combina una o más cadenas en una ruta.
¿Hay un equivalente de Java para System.IO.Path.Combine()
en C # /. NET? ¿O algún código para lograr esto?
Este método estático combina una o más cadenas en una ruta.
Respuestas:
En lugar de mantener todo basado en cadenas, debe usar una clase que esté diseñada para representar una ruta del sistema de archivos.
Si está utilizando Java 7 o Java 8, debería considerar usarlo
java.nio.file.Path
;Path.resolve
se puede usar para combinar una ruta con otra o con una cadena. LaPaths
clase auxiliar también es útil. Por ejemplo:Si necesita atender entornos anteriores a Java-7, puede usar
java.io.File
, de esta manera:Si lo desea de nuevo como una cadena más tarde, puede llamar
getPath()
. De hecho, si realmente quisiera imitarPath.Combine
, simplemente podría escribir algo como:fuente
path2
(ignorandopath1
) sipath2
es una ruta absoluta. La versión de Java descartará el líder/
o\
y lo tratará como una ruta relativa.File.getCanonicalPath
.File
en C # si lo desea. (Estoy asumiendo que quiere decir la existencia deFile
un beneficio, que estoy de acuerdo con.)En Java 7, debe usar
resolve
:Si bien la clase de ruta NIO2 puede parecer un poco redundante para File con una API innecesariamente diferente, de hecho es sutilmente más elegante y robusta.
Tenga en cuenta que
Paths.get()
(como lo sugirió otra persona) no tiene una sobrecarga tomando unPath
, y hacerPaths.get(path.toString(), childPath)
NO es lo mismo queresolve()
. De losPaths.get()
documentos :La función hermana
resolve
es la excelenterelativize
:fuente
La respuesta principal es usar objetos de archivo. Sin embargo, Commons IO tiene una clase FilenameUtils que puede hacer este tipo de cosas, como el método concat () .
fuente
Sé que ha pasado mucho tiempo desde la respuesta original de Jon, pero tenía un requisito similar al OP.
Al extender la solución de Jon, se me ocurrió lo siguiente, que tomará uno o más segmentos de ruta y tomará tantos segmentos de ruta que pueda lanzarle.
Uso
Codifique aquí para otros con un problema similar
fuente
Enfoque independiente de la plataforma (usa File.separator, es decir, el funcionamiento depende del sistema operativo donde se ejecuta el código:
fuente
Para mejorar la respuesta de JodaStephen, Apache Commons IO tiene FilenameUtils que hace esto. Ejemplo (en Linux):
Es independiente de la plataforma y producirá los separadores que su sistema necesite.
fuente
Aquí hay una solución que maneja múltiples partes del camino y condiciones de borde:
fuente
Si no necesita más que cadenas, puede usar com.google.common.io.Files
Llegar
fuente
Tal vez tarde para la fiesta, pero quería compartir mi opinión sobre esto. Estoy usando un patrón Builder y permito
append
llamadas convenientemente encadenadas . Se puede ampliar fácilmente para admitir el trabajo conPath
objetos también.Ejemplo de uso:
El resultado
absolute
contendrá algo como:o tal vez incluso:
fuente
Esto también funciona en Java 8:
fuente
Esta solución ofrece una interfaz para unir fragmentos de ruta desde una matriz String []. Utiliza java.io.File.File (String parent, String child) :
Entonces puedes simplemente hacer:
Devoluciones:
fuente