📜  在目录中遍历的Java程序

📅  最后修改于: 2022-05-13 01:55:40.652000             🧑  作者: Mango

在目录中遍历的Java程序

目录是包含文件和理事会的组织文件系统结构。

在这里,即使是攻击者也可以尝试遍历或访问我们称为“文件遍历攻击”或“路径遍历攻击”的不同目录的文件夹。简而言之,这里的目录被遍历,它在 home/root 目录之外。这些文件是用户无法访问的服务器内部文件。

那么让我们简要介绍一下遍历攻击

  • 攻击者可以从不同的目录访问该文件
  • 服务器配置错误时允许目录浏览
  • 有时甚至攻击者也可以访问超出 Web 浏览器根目录的文件

所需的先决条件listFiles()并考虑到没有路径遍历攻击。

有两种方法可以在目录中遍历

  • 使用 listFiles() 方法
  • 使用 Stream

假设存在一个路径为 C:\\GFG 的目录。下图显示了 GFG 文件夹中存在的文件和目录。子目录“Ritik”包含一个名为“Logistics.xlsx”的文件,子目录“Rohan”包含一个名为“Payments.xlsx”的文件。

GFG目录

下面的Java程序说明了如何在目录中遍历。

方法一:使用 listFiles() 方法

  • 创建一个 File 数组来存储文件的名称和路径。
  • 调用 displayFiles 方法()以显示所有文件。
Java
// Java Program to traverse through a directory
import java.io.File;
 
class GFG {
   
    // function 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());
             }
           
            // print the file name present in given path
            else
            {
                System.out.println("File: "
                                   + filename.getName());
            }
        }
    }
 
    // Main Method
    public static void main(String[] args)
    {
        // array to store the name of files and directories
        File[] files = new File("C:\\GFG").listFiles();
       
        // call displayFiles function to display files
        displayFiles(files);
    }
}


Java
// Java Program to display files with
// complete path present in a directory
 
import java.io.*;
 
// Importing Files
import java.nio.file.*;
import java.util.stream.Stream;
 
class GFG {
   
    // Main Method
    public static void main(String[] args)
        throws IOException
    {
       
        // create try-catch block and provide
        // the directory path
        try (Stream filepath
             = Files.walk(Paths.get("c:\\GFG")))
           
        {
           // print the name of directories and files with
           // entire path
            filepath.forEach(System.out::println);
        }
       
        // if no such directory exists throw an exception.
        catch (IOException e)
        {
            throw new IOException("Directory Not Present!");
        }
    }
}



输出:

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

方法 2:使用 Stream

从Java 8 开始,引入了 walk() 方法来递归遍历整个目录并检索 Stream 作为返回值。

  • 创建文件路径流。
  • 打印整个目录和文件路径
  • 如果路径中提供的目录不存在,则抛出异常。

Java

// Java Program to display files with
// complete path present in a directory
 
import java.io.*;
 
// Importing Files
import java.nio.file.*;
import java.util.stream.Stream;
 
class GFG {
   
    // Main Method
    public static void main(String[] args)
        throws IOException
    {
       
        // create try-catch block and provide
        // the directory path
        try (Stream filepath
             = Files.walk(Paths.get("c:\\GFG")))
           
        {
           // print the name of directories and files with
           // entire path
            filepath.forEach(System.out::println);
        }
       
        // if no such directory exists throw an exception.
        catch (IOException e)
        {
            throw new IOException("Directory Not Present!");
        }
    }
}


输出:

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