Programa Java para recorrer en un directorio

Un directorio es una estructura de sistema de archivos organizacional que contiene archivos y directorios . Incluso un atacante puede intentar atravesar o acceder a una carpeta que llamamos ‘File Traversal Attack o Path Traversal Attack en un directorio diferente’. En resumen, aquí se recorre el directorio que está fuera del directorio de inicio/raíz. Estos archivos son archivos internos del servidor a los que el usuario no puede acceder. 

Ataques transversales

  • El atacante puede acceder al archivo desde un directorio diferente
  • La exploración de directorios está permitida cuando el servidor está mal configurado
  • A veces, incluso un atacante puede acceder a archivos que están más allá de los directorios raíz del navegador web.

Los requisitos previos requeridos son listFiles() y considerar que no hay ataques de cruce de ruta.

Distintas Maneras de recorrer en un Directorio

  1. Usando el método listFiles() de la clase File
  2. Usando el método walk() en Java 8 y en adelante

Método 1: Usar el método listFiles() de la clase File

Supongamos que existe un directorio con la ruta C:\\GFG. La siguiente imagen muestra los archivos y directorios presentes dentro de la carpeta GFG. El subdirectorio «Ritik» contiene un archivo llamado «Logistics.xlsx» y el subdirectorio «Rohan» contiene un archivo llamado «Payments.xlsx»

Directorio GFG

Acercarse: 

  1. Cree una array de archivos para almacenar el nombre y la ruta de los archivos.
  2. Llame al método displayFiles() para mostrar todos los archivos.

Ejemplo:

Java

// Java Program to Traverse Through a Directory
 
// Importing required classes
import java.io.File;
 
// Main class
class GFG {
 
    // Method 1
    // To display fies
    public static void displayFiles(File[] files)
    {
        // Traversing through the files array
        for (File filename : files) {
            // If a sub directory is found,
            // print the name of the sub directory
            if (filename.isDirectory()) {
                System.out.println("Directory: "
                                   + filename.getName());
 
                // and call the displayFiles function
                // recursively to list files present
                // in sub directory
                displayFiles(filename.listFiles());
            }
 
            // Printing the file name present in given path
            else {
                // Getting the file name
                System.out.println("File: "
                                   + filename.getName());
            }
        }
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
        // Storing the name of files and directories
        // in an array of File type
        File[] files = new File("C:\\GFG").listFiles();
 
        // Calling method 1 to
        // display files
        displayFiles(files);
    }
}

 Producción: 

File: article.docx
File: GFG.txt
File: numbers.txt
Directory: Ritik
File: Logistics.xlsx
Directory: Rohan
File: Payments.xlsx

Método 2: usar el método walk() en Java 8 y en adelante 

Java 8 en adelante, se introdujo el método walk() para iterar sobre todo el directorio de forma recursiva y recuperar Stream<Path> como valor de retorno.

Acercarse:

  1. Cree una secuencia de rutas de archivo.
  2. Imprime todo el directorio y la ruta del archivo.
  3. Genera una excepción si no existe dicho directorio como se indica en la ruta.

Ejemplo:

Java

// Java Program to Display Files with
// Complete Path Present in a Directory
 
// Importing required classes
import java.io.*;
import java.nio.file.*;
import java.util.stream.Stream;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
        throws IOException
    {
 
        // Creating try-catch block and
        // providing the directory path of local machine
        try (Stream<Path> filepath
             = Files.walk(Paths.get("c:\\GFG")))
 
        {
            // Printing the name of directories and files
            // with entire path
            filepath.forEach(System.out::println);
        }
 
        // Catch block to handle exceptions
        catch (IOException e) {
 
            // If no such directory exists throw an
            // exception
            throw new IOException("Directory Not Present!");
        }
    }
}

 Producción: 

c:\GFG
c:\GFG\article.docx
c:\GFG\GFG.txt
c:\GFG\numbers.txt
c:\GFG\Ritik
c:\GFG\Ritik\Logistics.xlsx
c:\GFG\Rohan
c:\GFG\Rohan\Payments.xlsx

Publicación traducida automáticamente

Artículo escrito por rohanchopra96 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *