2011-05-21 21 views
26

El viejo, más o menos obsoleta java.io.File API tenía un método exists que volvió cierto si el File apuntaban a una ya existente en el sistema de archivos, pero no pudo encontrar ningún método comparable para java.nio.file.Path:¿Cómo comprobar si una ruta apunta a un archivo existente con la nueva API de archivos de Java 7?

scala> import java.nio.file._ 
import java.nio.file._ 

scala> val path = Paths.get("/foo") 
path: java.nio.file.Path = /foo 

scala> path. 
asInstanceOf  compareTo  endsWith   getFileName  getFileSystem getName   getNameCount  
getParent  getRoot   isAbsolute  isInstanceOf  iterator   normalize  register   
relativize  resolve   resolveSibling startsWith  subpath   toAbsolutePath toFile   
toRealPath  toString   toUri 

Por supuesto, podría simplemente convertir el path a un File pero supongo que hay una mejor manera de hacerlo.

Editar: OK, gracias a todos los que señalan Files.exists. ¿Alguien sabe por qué se volvió más complicado (que tener un método simple exists en Path)?

Respuesta

46

utilizar la clase Files:

Files.exists(path);

EDIT: para responder a su pregunta subsiguiente, creo que la razón por la que el método es en otra clase es que Path es una interfaz, y que quería dar una implementación (similar a poner métodos de clasificación en la clase Collections en lugar de la interfaz List).

no directamente relacionados con la pregunta, pero según monstruo de trinquete no es un argumento opcional varags con el método, así, que determina cómo se manejan enlaces simbólicos

Read the Javadocs from Oracle here.

+0

yup. Eso es. +1 – aioobe

+0

Básicamente, se asegura de que solo haya una implementación (suministrada por Oracle) de los métodos en 'Archivos' y que no sean potencialmente diferentes, ¿qué hubiera sido posible si se definiera en 'Ruta'? – soc

+0

Sí, me imagino que esa es la razón. Solo una implementación, y una que es independiente de la implementación 'Path'. – OpenSauce

0

No es necesario agregar un nuevo método para eso: use Path.toFile() para obtener un archivo, luego ejecute exists en eso.

+2

¿No es exactamente eso lo que dije, mencionando que tiene que haber una manera mejor? :-) – soc

+0

Ah. Entonces te estás opuesto a tener que pasar por eso. Bueno, podrías intentar usar 'toRealPath()' que creo que arrojará una IOException si el archivo no existe. – Femi

9

mirada en la clase de utilidad Files para el paquete:

Files.exists(Path path,LinkOption... options) 
2

En la nueva API del sistema de archivos a continuación, todas las operaciones de archivo se definen por la clase de archivos. La mayoría de estas operaciones se implementan en términos de otras operaciones o delegan en el proveedor del sistema de archivos apropiado. La interfaz de ruta por otro lado es donde se definen las operaciones de ruta. Una ruta de acceso es solo el objeto que se usa para ubicar un archivo. Si desea realizar operaciones en un archivo, invoque el método apropiado de Archivos, especificando la Ruta para ubicar el archivo.

Cuestiones relacionadas