2011-12-27 24 views
6

Quiero comprobar si un String determinado es un archivo o un directorio, he intentado con los métodos isFile() y isDirectory() de la clase File pero el problema es que si el directorio o archivo no existe estos métodos devuelve falso, ya que como se indica en el javadoc:Java isFile(), isDirectory() sin verificar la existencia

isFile():

verdadero si y sólo si el archivo denotado por este resumen ruta de acceso existe y es un archivo normal; falso en caso contrario

isDirectory():

verdadero si y sólo si el fichero denotado por esta vía de acceso abstracta existe y es un directorio; falso en caso contrario

Básicamente necesito dos métodos sin la cláusula existen ...

así que quiero probar si la cadena dada cumple con un formato de directorio o cumple con un formato de archivo, en una multiplataforma contexto (por lo tanto, debería funcionar en Windows, Linux y Mac Os X).

¿Existe alguna biblioteca que proporcione estos métodos? ¿Cuál podría ser la mejor implementación de estos métodos?

ACTUALIZACIÓN

En el caso de una cadena que podría ser a la vez (sin extensión) de forma predeterminada debe ser identificado como directorio, si no existe un archivo con ese camino.

+0

Apache commons.io podría ayudarlo. Tal vez usando FileUtils.sizeof() o algo así ... – Alfabravo

+3

¿Cómo sabrá Java si un nombre de ruta que apunta a algo que no existe es un archivo o un directorio si no hay nada allí? No hay un formato de ruta para determinar si algo es un archivo o directorio en todos los sistemas operativos. –

+0

Lo que desea no es posible, no hay diferencia entre un archivo y un directorio a menos que realmente exista en el sistema de archivos (y tiene los atributos necesarios que proporciona el sistema operativo) Las extensiones y cosas por el estilo podrían ser solo suposiciones. Nota al margen: la extensión tampoco existe hoy en día, es un artefacto viejo y antiguo que proviene de DOS. – bestsss

Respuesta

1

Parece que sabes lo que quieres, de acuerdo con tu actualización: si la ruta no existe y la ruta tiene una extensión, es un archivo, si no es un directorio. Algo como esto sería suficiente:

bool IsPathDirectory() { 
    File test = new File(myPath); 

    // check if the file/directory is already there 
    if (!file.exists()) { 
     // see if the file portion it doesn't have an extension 
     return test.getName().lastIndexOf('.') == -1; 
    } else { 
     // see if the path that's already in place is a file or directory 
     return test.isDirectory(); 
    } 
} 
4

¿Por qué no simplemente envolverlos en una llamada a File#exists()?

File file = new File(...); 
if (file.exists()) { 

    // call isFile() or isDirectory() 

} 

Al hacer esto, usted ha negado efectivamente la "existe" porción de isFile() y isDirectory(), ya que tiene la garantía de que no existe.


También es posible que haya entendido mal lo que está preguntando aquí. Dada la segunda parte de su pregunta, ¿está tratando de usar isFile() y isDirectory() en archivos inexistentes para ver si parecen que son archivos o directorios?

Si es así, va a ser difícil hacerlo con la API File (y difícil de hacer en general). Si /foo/bar/baz no existe, no es posible determinar si se trata de un archivo o un directorio. Podría ser cualquiera.

+1

"Podría ser cualquiera". Y no podría ser ninguno de los dos. –

+0

En el caso de una cadena que podría ser ambas (sin extensión) por defecto debería identificarse como directorio, si un archivo con esa ruta no existe. – aleroot

+0

@aleroot: eso es algo que tendrá que hacer cumplir su propia lógica de negocios, ya que las extensiones de archivos se basan principalmente en convenciones y realmente no importan en la mayoría de los sistemas de archivos. –

7

Así que quiero probar si la cadena dada cumple con un formato de directorio o cumple con un formato de archivo, en un contexto multiplataforma (por lo tanto, debería funcionar en Windows, Linux y Mac OS X).

En Windows, un directorio puede tener una extensión y no es necesario que un archivo tenga una extensión. Por lo tanto, no se puede decir simplemente mirando la cadena.

Si aplica una regla de que un directorio no tiene una extensión, y un archivo siempre tiene una extensión, entonces puede determinar la diferencia entre un directorio y un archivo buscando una extensión.

Cuestiones relacionadas