Java - 搜索目录中的文件

A C*_*A C 10 java directory search file

这应该是简单的,但我无法理解 - "编写一个程序来搜索给定目录中的特定文件名." 我找到了一些硬编码文件名和目录的例子,但是我需要用户输入的目录和文件名.

public static void main(String[] args) {
    String fileName = args[0]; // For the filename declaration
    String directory;     
    boolean found;

    File dir = new File(directory);

    File[] matchingFiles = dir.listFiles(new FilenameFilter() {
        public boolean accept(File dir, String fileName) {
            return true;
        }
    });

}
Run Code Online (Sandbox Code Playgroud)

Vis*_*l K 25

你可以尝试这样的事情:

import java.io.*;
import java.util.*;
class FindFile 
{
    public void findFile(String name,File file)
    {
        File[] list = file.listFiles();
        if(list!=null)
        for (File fil : list)
        {
            if (fil.isDirectory())
            {
                findFile(name,fil);
            }
            else if (name.equalsIgnoreCase(fil.getName()))
            {
                System.out.println(fil.getParentFile());
            }
        }
    }
    public static void main(String[] args) 
    {
        FindFile ff = new FindFile();
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the file to be searched.. " );
        String name = scan.next();
        System.out.println("Enter the directory where to search ");
        String directory = scan.next();
        ff.findFile(name,new File(directory));
    }
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

J:\Java\misc\load>java FindFile
Enter the file to be searched..
FindFile.java
Enter the directory where to search
j:\java\
FindFile.java Found in->j:\java\misc\load
Run Code Online (Sandbox Code Playgroud)


LuC*_*Cio 7

使用 Java 8+ 特性,我们可以用几行代码编写代码:

protected static Collection<Path> find(String fileName, String searchDirectory) throws IOException {
    try (Stream<Path> files = Files.walk(Paths.get(searchDirectory))) {
        return files
                .filter(f -> f.getFileName().toString().equals(fileName))
                .collect(Collectors.toList());

    }
}
Run Code Online (Sandbox Code Playgroud)

Files.walk返回一个Stream<Path>“遍历根植于”给定的文件树searchDirectory。要选择所需的文件,只需在Stream files. 它将 a 的文件名Path与给定的fileName.

请注意,文件Files.walk要求

此方法必须在 try-with-resources 语句或类似的控制结构中使用,以确保在流的操作完成后立即关闭流的打开目录。

我正在使用try-resource-statement


对于高级搜索,另一种方法是使用PathMatcher

protected static Collection<Path> find(String searchDirectory, PathMatcher matcher) throws IOException {
    try (Stream<Path> files = Files.walk(Paths.get(searchDirectory))) {
        return files
                .filter(matcher::matches)
                .collect(Collectors.toList());

    }
}
Run Code Online (Sandbox Code Playgroud)

如何使用它来查找某个文件的示例:

public static void main(String[] args) throws IOException {
    String searchDirectory = args[0];
    String fileName = args[1];
    PathMatcher matcher = FileSystems.getDefault().getPathMatcher("regex:.*" + fileName);
    Collection<Path> find = find(searchDirectory, matcher);
    System.out.println(find);
}
Run Code Online (Sandbox Code Playgroud)

更多相关信息:Oracle 查找文件教程