paths new clase canonical java string path split

new - Java dividió el camino...?



path absolute java (4)

Esta es la entrada como cadena:

"C:/jdk1.6.0/bin/program1.java"

Necesito salida como:

Path-->C:/jdk1.6.0/bin/ file--->program1.java extension--->.java

Cuidado con el "/" char. Obtuve fácilmente la salida para "/".


La clase File le brinda todo lo que necesita:

File f = new File("C://jdk1.6.0//bin//program1.java"); System.out.println("Path-->" + f.getParent()); System.out.println("file--->" + f.getName()); int idx = f.getName().lastIndexOf(''.''); System.out.println("extension--->" + ((idx > 0) ? f.getName().substring(idx) : "") );

EDITAR: Gracias Dave por señalar que String.lastIndexOf devolverá -1 si File.getName no contiene ''.''.


Como la clase de File de Java no admite la búsqueda de la extensión, le sugiero que cree una subclase de File que proporcione esta capacidad:

package mypackage; /** * Enhances java.io.File functionality by adding extension awareness. */ public class File extends java.io.File { /** * Returns the characters after the last period. * * @return An empty string if there is no extension. */ public String getExtension() { String name = getName(); String result = ""; int index = name.lastIndexOf( ''.'' ); if( index > 0 ) { result = name.substring( index ); } return result; } }

Ahora simplemente sustituya su versión de File for Java y, cuando se combina con la respuesta de Kurt, le brinde todo lo que necesita.

Tenga en cuenta que el uso de una subclase es ideal porque si desea cambiar el comportamiento (debido a un sistema operativo diferente que utiliza un token delimitador de extensión diferente), solo necesita actualizar un único método y toda su aplicación continúa funcionando. (O si necesita corregir un error, como intentar ejecutar str.substring( -1 ) .

En otras palabras, si extraes una extensión de archivo en más de un lugar en tu código base, has cometido un error.

Yendo más lejos, si quisiera abstraer completamente el conocimiento del tipo de archivo (porque algunos sistemas operativos podrían no usar el separador . ), Podría escribir:

/** * Enhances java.io.File functionality by adding extension awareness. */ public class File extends java.io.File { public File( String filename ) { super( filename ); } /** * Returns true if the file type matches the given type. */ public boolean isType( String type ) { return getExtension().equals( type ); } /** * Returns the characters after the last period. * * @return An empty string if there is no extension. */ private String getExtension() { String name = getName(); String result = ""; int index = name.lastIndexOf( ''.'' ); if( index > 0 ) { result = name.substring( index ); } return result; } }

Consideraría esto una solución mucho más robusta. Esto permitiría sin problemas sustituir un mecanismo de detección de tipo de archivo más avanzado (análisis del contenido del archivo para determinar el tipo), sin tener que cambiar el código de llamada. Ejemplo:

File file = new File( "myfile.txt" ); if( file.isType( "png" ) ) { System.out.println( "PNG image found!" ); }

Si un usuario guarda "myfile.png" como "miarchivo.txt", la imagen se procesará porque la versión avanzada (que no se muestra aquí) buscará el marcador "PNG" que inicia cada archivo PNG en el (ciber) mundo.


Debe compensar las barras diagonales dobles devueltas en Ruta (si se ha generado mediante programación).

//Considering that strPath holds the Path String String[] strPathParts = strPath.split("////"); //Now to check Windows Drive System.out.println("Drive Name : "+strPathParts[0]);