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)
使用 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 查找文件教程