我想知道如何编写一个递归程序来查找由起始路径指示的Java文件.它应该在树中搜索指定的文件.如果找到该文件,则应返回该文件的位置.这是我到目前为止(不多,仍然需要基本的清理).我需要使用这些确切的方法.我大多混淆了什么方法.所以我知道我需要使用:
File f = new File(dirName);
String [] fileList = f.list();
File aFile = new File (dirName + "\\" + fileList[i]);
if (aFile.isDirectory()) {...}
public class FindFile {
Run Code Online (Sandbox Code Playgroud)
如果你能帮我弄清楚每种方法的用途,那将是一个惊人的帮助!我只是不太了解每种方法的逻辑.我还有一个我需要使用的另一个类的驱动程序.
/**
* This constructor accepts the maximum number of files to find.
*/
public FindFile (int maxFiles)
{
}
/**
* The parameters are the target file name to look for and the directory to start in.
* @param target = target file name, dirName = directory to start in
*/
public void directorySearch (String target, String dirName) {
File f = new File(dirName);
String [] fileList = f.list();
File aFile = new File(dirName + "\\" + fileList[i]);
if (aFile.isDirectory()) {
}
else {
}
}
/**
* This accessor returns the number of matching files found.
* @return number of matching files found
*/
public int getCount () {
return -1;
}
/**
* This getter returns the array of file locations, up to maxFiles in size.
* @return array of file locations
*/
public String [] getFiles () {
return new String[] {""};
}
/**
* Prompt the user for max number of files to look for, the directory to start in, and the file name.
* Then, print out the list of found files with the full path name to the file (including starting
* directory). In the event of an exception being thrown, driver catches it and provides an appropriate
* message to the user.
*/
public static void main (String [] args) {
Scanner keyboard = new Scanner(System.in);
System.out.println("What is the max number of files to look for?");
System.out.println("What directory should we start in?");
Systme.out.println("What is the file name?");
}
Run Code Online (Sandbox Code Playgroud)
}
lak*_*sys 12
您可以使用这样的java 8 lambda功能
Files.walk(Paths.get("your search path"))
.filter(Files::isRegularFile)
.forEach((f)->{
String file = f.toString();
if( file.endsWith("file to be searched"))
System.out.println(file + " found!");
});
Run Code Online (Sandbox Code Playgroud)
需要使用递归在所有文件、目录和子目录中查找该文件
public static void main(String[] args) {
boolean found = searchFile(new File("/tmp"), "10174");
System.out.println(found);
}
private static boolean searchFile(File file, String search) {
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
boolean found = searchFile(f, search);
if (found)
return true;
}
} else {
if (search.equals(file.getName())) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
如果找到文件需要返回
static File searchFile(File file, String search) {
if (file.isDirectory()) {
File[] arr = file.listFiles();
for (File f : arr) {
File found = searchFile(f, search);
if (found != null)
return found;
}
} else {
if (file.getName().equals(search)) {
return file;
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)