¿Es esto para un archivo genérico o está intentando obtener el directorio principal de su archivo fuente? Si es lo último, no estoy seguro de que entienda la compilación de Java. En tiempo de ejecución, test.javaprobablemente ni siquiera exista en la computadora donde se ejecuta el programa. Es el .classarchivo compilado que se ejecuta. Así que esto solo funcionará si sabe dónde dddestá ubicado, en cuyo caso no tiene sentido encontrarlo programáticamente; simplemente codifíquelo.
El comentario de Mark es una mejor solución que lastIndexOf():
file.getParentFile().getName();
Estas soluciones solo funcionan si el archivo tiene un archivo principal (por ejemplo, creado a través de uno de los constructores de archivos que toma un archivo principal File). Cuando getParentFile()sea nulo, deberá recurrir al uso lastIndexOf, o usar algo como Apache Commons 'FileNameUtils.getFullPath() :
Hay varias variantes para retener / eliminar el prefijo y el separador final. Puede usar la misma FilenameUtilsclase para tomar el nombre del resultado, usar lastIndexOf, etc.
Esto arroja ArrayOutOfBoundsException si ya está en la ubicación raíz - "/" -
Jnmgr
2
File file =newFile("C:/aaa/bbb/ccc/ddd/test.java");File curentPath =newFile(file.getParent());//get current path "C:/aaa/bbb/ccc/ddd/"String currentFolder= currentPath.getName().toString();//get name of file to string "ddd"
si necesita agregar la carpeta "ddd" por otra ruta, use;
test.java
probablemente ni siquiera exista en la computadora donde se ejecuta el programa. Es el.class
archivo compilado que se ejecuta. Así que esto solo funcionará si sabe dóndeddd
está ubicado, en cuyo caso no tiene sentido encontrarlo programáticamente; simplemente codifíquelo.Respuestas:
Utilice
File
elgetParentFile()
método de yString.lastIndexOf()
para recuperar solo el directorio padre inmediato.El comentario de Mark es una mejor solución que
lastIndexOf()
:Estas soluciones solo funcionan si el archivo tiene un archivo principal (por ejemplo, creado a través de uno de los constructores de archivos que toma un archivo principal
File
). CuandogetParentFile()
sea nulo, deberá recurrir al usolastIndexOf
, o usar algo como Apache Commons 'FileNameUtils.getFullPath()
:Hay varias variantes para retener / eliminar el prefijo y el separador final. Puede usar la misma
FilenameUtils
clase para tomar el nombre del resultado, usarlastIndexOf
, etc.fuente
lastIndexOf
, solo usefile.getParentFile().getName()
.null
(si creó unaFile
instancia con una ruta relativa), intentefile.getAbsoluteFile().getParentFile().getName()
.f.getParentFile()
puede ser nulo, por lo que debe marcarlo.fuente
Utilice a continuación,
fuente
En Java 7 tienes la nueva API de Paths . La solución moderna y más limpia es:
El resultado sería:
fuente
Si solo tiene una ruta de cadena y no desea crear un nuevo objeto de archivo, puede usar algo como:
fuente
si necesita agregar la carpeta "ddd" por otra ruta, use;
fuente
Desde Java 7, preferiría usar Path. Solo necesitas poner la ruta en:
y crea un método get:
fuente
En Groovy:
No es necesario crear una
File
instancia para analizar la cadena en groovy. Se puede hacer de la siguiente manera:La división creará la matriz
[C:, aaa, bbb, ccc, ddd, test.java]
y el índice-2
apuntará a la entrada anterior a la última, que en este caso esddd
fuente
fuente