En Pythonpuedo unir dos caminos con os.path.join:
os.path.join("foo", "bar") # => "foo/bar"
Estoy tratando de achive la misma en Java, sin preocuparse de si la OSes Unix, Solariso Windows:
public static void main(String[] args) {
Path currentRelativePath = Paths.get("");
String current_dir = currentRelativePath.toAbsolutePath().toString();
String filename = "data/foo.txt";
Path filepath = currentRelativePath.resolve(filename);
// "data/foo.txt"
System.out.println(filepath);
}
Esperaba que Path.resolve( )se uniera a mi directorio actual /home/user/testcon data/foo.txtmaking /home/user/test/data/foo.txt. ¿Qué me estoy equivocando?

filepath.toString()new File(parent, child)Respuestas:
Aunque la solución original para obtener el directorio actual usando
empty Stringworks. Pero se recomienda utilizar lauser.dirpropiedad para el directorio actual yuser.homepara el directorio de inicio.salida:
De la documentación de la clase Java Path :
Por que
Paths.get("").toAbsolutePath()funcionaCuando se pasa una cadena vacía al
Paths.get(""), elPathobjeto devuelto contiene una ruta vacía. Pero cuando llamamosPath.toAbsolutePath(), verifica si la longitud de la ruta es mayor que cero; de lo contrario, usa lauser.dirpropiedad del sistema y devuelve la ruta actual.Aquí está el código para la implementación del sistema de archivos Unix: UnixPath.toAbsolutePath ()
Básicamente, debe crear la
Pathinstancia nuevamente una vez que resuelva la ruta del directorio actual.También sugeriría usar
File.separatorCharcódigo independiente de la plataforma.Salida:
fuente
separatorChares inferior a alguna "abstracción de nivel superior", algo que se parece aPathBuilder(currentRelativePath).append("data").append("foo.txt")Paths#get(String first, String... more)estados,Para obtener el directorio de usuarios actual, simplemente puede usar
System.getProperty("user.dir").Además, el
getmétodo utiliza el argumento de longitud variable deString, que se utilizará para proporcionar cadenas de ruta posteriores. Por lo tanto, para crearPathpor/test/inside/abc.txtlo que tienes que usarlo de una manera siguiente,fuente
No es un método específico.
Si usa java 8 o mejor, tiene 2 opciones:
a) Utilice java.util.StringJoiner
b) Utilizar
String.join(File.pathSeparator, "path1", "path2");Si usa java 7 o versiones anteriores, puede usar la biblioteca commons-lang de apache commons. La clase StringUtils tiene un método para unir cadenas usando un separador.
C)
StringUtils.join(new Object[] {"path1", "path2"}, File.pathSeparator);Una nota al margen: puede usar el separador de rutas de Linux "/" para Windows (solo recuerde que las rutas absolutas son algo como "/ C: / mydir1 / mydir2". Usar siempre "/" es muy útil si usa protocolos como file: //
fuente
/home/user/test:foo.txtFile.separatortrabajó para mí en lugar deFile.pathSeparatorLa forma más básica es:
Nunca deberías escribir
Paths.get(""). Me sorprende que funcione en absoluto. Si desea hacer referencia al directorio actual de forma explícita, utilicePaths.get(System.getProperty("user.dir")). Si desea el directorio de inicio del usuario, usePaths.get(System.getProperty("user.home")).También puede combinar los enfoques:
fuente
La forma más confiable e independiente de la plataforma de unir rutas en Java es usando
Path::resolve(como se indica en JavaDoc paraPaths::get). Para una matriz de cadenas de longitud arbitraria que representan partes de una ruta, estas se pueden unir utilizando una secuencia de Java:fuente
Puedes hacer como
Una buena publicación detallada está aquí .
fuente