java - 我怎样才能让这段代码最终打印一条语句,告诉是否至少有一个匹配项或文件不存在?
问题描述
在这里,我要做的是打印一个最终声明,以判断是否找到了文件。我尝试过布尔标志,但由于递归方式而没有与我一起使用。我只需要使用递归的解决方案。这是代码:
public static void searchForFile(File dir, String target) {
// If dir is not a directory, return
if (!dir.isDirectory()) {
System.out.println("Path is not a directory.");
System.exit(0);
}
// Check each item in the directory
for (File folderItem : dir.listFiles()) {
// Recurse if it's a directory
if (folderItem.isDirectory()) {
searchForFile(folderItem,target);
} else {
// If it's a file, check for a match
if (folderItem.getName().equals(target)) {
System.out.println(folderItem.getAbsolutePath());
}
}
}
}
public static void main(String[] args)
{
// The root folder to search
File rootFolder = new File("/Users/markDev/Desktop/path");
searchForFile(rootFolder, "test.txt");
}
解决方案
当您使用递归时,您应该在这种情况下返回!dir.isDirectory
而不是像这样退出System.exit(0);
如果要打印每个匹配项的父文件夹,则应使用folderItem.getParentFile().getAbsolutePath()
public static void searchForFile(File dir, String target) {
// If dir is not a directory, return
if (!dir.isDirectory()) {
return;
}
// Check each item in the directory
for (File folderItem : dir.listFiles()) {
// Recurse if it's a directory
if (folderItem.isDirectory()) {
searchForFile(folderItem,target);
} else {
// If it's a file, check for a match
if (folderItem.getName().equals(target)) {
System.out.println(folderItem.getParentFile().getAbsolutePath());
}
}
}
}
希望它能解决你的问题:)
推荐阅读
- arrays - 根据数组索引增加乘数
- reactjs - 我应该在容器组件中添加异步代码吗?
- r - df 中包含特定值的第一行之后的子集行
- leaflet - 将传单地图以 PDF 格式导出到服务器
- scala - 如何使用 Scala 在 Spark Streaming 中序列化 org.joda.time.DateTime?
- synchronization - CouchDB 数据同步
- dictionary - 字典
ChangeNotification:有没有办法检测双释放错误? - c# - 检查所有部件窗口功能是否启用并启用关闭 .Net Framework
- spring-boot - Weblogic 和 Spring Boot com.fasterxml.jackson.annotation.JsonFormat$Value.hasLenient()Z 方法不存在
- asp.net - .NET 用户缺少 IIS 10.0