"¡Oh, Rishi! ¡Hola!"

"¡Hola, Amigo! ¿Cómo va la vida?"

"Genial. Bilaabo acaba de decirme un montón de cosas interesantes sobre File y cómo trabajar con él".

"Da la casualidad de que creo que tengo algo que agregar sobre este tema".

"¿En serio? Entonces soy todo oídos".

"Está bien, escucha. Java está en constante evolución. Sus desarrolladores buscan constantemente nuevas formas de hacer diferentes cosas de manera más eficiente. En Java 7, agregaron una alternativa a la clase File".

Archivos, Ruta - 1

"¿Alternativa?"

"Sí. Tomaron la clase Archivo como base, agregaron algunas cosas nuevas, cambiaron el nombre de los métodos y luego también la dividieron en dos. Así que ahora hay dos clases nuevas: Ruta y ArchivosRuta es en realidad el nuevo análogo del Archivo y File es una clase de utilidad (análoga a las clases Arrays y Collections). Todos los métodos estáticos de la clase File van allí. Hacerlo de esta manera es 'más correcto' en términos de programación orientada a objetos".

"Bueno, si es en términos de programación orientada a objetos, entonces está bien. Entonces, ¿qué cambió?"

"Primero, decidieron no reproducir los métodos que devolvían  objetos String  y File . En la clase Path  , todos los métodos devuelven un Path .

"En segundo lugar, trasladaron muchos métodos de utilidad estáticos a la clase Archivos ".

"Tercero, se volvió más conveniente trabajar con rutas relativas".

"Aquí hay una lista de los métodos:"

Métodos de la clase Path Descripción
boolean isAbsolute() Devuelve verdadero si la ruta es absoluta.
Path getRoot() Devuelve la raíz de la ruta actual, es decir, el directorio superior.
Path getFileName() Devuelve el nombre del archivo de la ruta actual.
Path getParent() Devuelve el directorio de la ruta actual.
boolean startsWith(Path other) Comprueba si la ruta actual comienza con la ruta pasada.
boolean endsWith(Path other) Comprueba si la ruta actual termina con la ruta pasada.
Path normalize() Normaliza la ruta actual. Por ejemplo, convierte «c:/dir/dir2/../a.txt» a «c:/dir/a.txt»
Path relativize(Path other) Calcula la ruta relativa de dos caminos, es decir, «la diferencia entre los caminos»
Path resolve(String other) Resuelve una ruta absoluta usando las rutas actual y relativa.
URI toUri() Devuelve el URI si la ruta/archivo actual.
Path toAbsolutePath() Convierte la ruta en una ruta absoluta si es relativa.
File toFile() Devuelve un objeto de archivo que corresponde al objeto de ruta actual.

"Y el camino actual, ¿qué es eso?"

"Esta es la ruta que se pasó al constructor del objeto Path cuyos métodos se están llamando".

"Está bien. Entonces, ¿qué métodos tiene la clase Archivos ?"

"¿Tienes prisa por llegar a algún lado? Te lo diré ahora mismo. Estos son los métodos más importantes:"

Métodos de la clase Archivos Descripción
Path createFile(…) Crea un archivo en el disco.
Path createDirectory(…) Crea un directorio.
Path createDirectories(…) Crea un directorio y todos sus subdirectorios.
Path createTempFile(…) Crea un archivo temporal.
Path createTempDirectory(…) Crea un directorio temporal.
void delete(Path path) Elimina un archivo.
Path copy(Path source, Path target,…) Copia un archivo.
Path move(Path source, Path target,…) Mueve un archivo.
boolean isSameFile(Path, Path) Compara dos archivos.
boolean isDirectory(Path) ¿La ruta es un directorio?
boolean isRegularFile(Path) ¿La ruta es un archivo?
long size(Path) Devuelve el tamaño del archivo.
boolean exists(Path) ¿Existe un objeto con el mismo nombre?
boolean notExists(Path) ¿No existe un objeto con el mismo nombre?
long copy(InputStream, OutputStream) Copia bytes de InputStream a OutputStream.
long copy(Path, OutputStream) Copia todos los bytes de Path a OutputStream.
long copy(InputStream, Path) Copia todos los bytes de InputStream a Path.
byte[] read(InputStream, int initialSize) Lee una matriz de bytes de InputStream.
byte[] readAllBytes(Path path) Lee todos los bytes del InputStream.
List<String> readAllLines(Path path,..) Lee el archivo de texto y devuelve una lista de cadenas.
Path write(Path path, byte[] bytes,…) Escribe una matriz de bytes en un archivo.

"¡Qué interesante! Tantas funciones geniales, y todas en el mismo lugar".

"Bueno, mire. Suponga que desea descargar un archivo de Internet y luego enviárselo a alguien. Para hacer esto, es muy conveniente crear un archivo temporal en el disco y guardar los datos leídos en él".

"¿Es difícil descargar un archivo de Internet?"

"Es muy simple. Mira este ejemplo:"

Código
URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png");
InputStream inputStream = url.openStream();

Path tempFile = Files.createTempFile("temp-",".tmp");
Files.copy(inputStream, tempFile);

"¿Y eso es?"

"Sí, ¿qué esperabas ver? Solo hay 4 líneas".

" Línea 1.  Crea un objeto URL, al que se pasa la URL del archivo de imagen.

" Línea 2.  Se abre una secuencia para leer un archivo (InputStream) en el objeto url.

Línea 3.  El createTempFilemétodo se utiliza para crear un archivo temporal.

" Línea 4.  El método Files.copy copia datos de  inputStream a tempFile. Eso es todo".

"¡Ingenioso!"

"Genial. Me alegro de que te guste. Creo que puedes descubrir el resto de los métodos por ti mismo. Y le pediré a Diego que te dé varias tareas sobre ellos".

"Por cierto, aquí hay un buen enlace sobre este material"