如何根据java中传递的关键字和内存加载方法查找特定目录及其文件
我的项目结构如下: 现在,我的问题是我必须迭代resources文件夹,并且给定一个键,我必须找到该特定文件夹及其文件。如何根据java中传递的关键字和内存加载方法查找特定目录及其文件,java,file,Java,File,我的项目结构如下: 现在,我的问题是我必须迭代resources文件夹,并且给定一个键,我必须找到该特定文件夹及其文件。 为此,我使用递归方法编写了以下代码,但我没有得到预期的输出: public class ConfigFileReader { public static void main(String[] args) throws Exception { System.out.println("Print L"); String
为此,我使用递归方法编写了以下代码,但我没有得到预期的输出:
public class ConfigFileReader {
public static void main(String[] args) throws Exception {
System.out.println("Print L");
String path = "C:\\...\\ConfigFileReader\\src\\resources\\";
//FileReader reader = new FileReader(path + "\\Encounter\\Encounter.properties");
//Properties p = new Properties();
//p.load(reader);
File[] files = new File(path).listFiles();
String resourceType = "Encounter";
System.out.println(navigateDirectoriesAndFindTheFile(resourceType, files));
}
public static String navigateDirectoriesAndFindTheFile(String inputResourceString, File[] files) {
String entirePathOfTheIntendedFile = "";
for (File file : files) {
if (file.isDirectory()) {
navigateDirectoriesAndFindTheFile(inputResourceString, file.listFiles());
System.out.println("Directory: " + file.getName());
if (file.getName().startsWith(inputResourceString)) {
entirePathOfTheIntendedFile = file.getPath();
}
} else {
System.out.print("Inside...");
entirePathOfTheIntendedFile = file.getPath();
}
}
return entirePathOfTheIntendedFile;
}
}
输出:
输出应返回路径为
C:\....\conference\conference.properties
。首先,如果它在遍历时找到字符串,它应该返回该文件夹中的文件,而无需导航下一部分,以及迭代Aspect
1k
文件的最佳方式是什么,因为每次我都无法遵循此方法,因为它似乎不是一种有效的方法。那么,如何使用内存中的方法解决这个问题呢?请引导我完成它。您需要检查递归调用的输出,并在找到匹配项时将其传回
始终使用文件
或路径
处理文件名
假设我已经理解了搜索的逻辑,请尝试扫描XXX\xxxyyy格式的文件
public class ConfigReader
{
public static void main(String[] args) throws Exception {
System.out.println("Print L");
File path = new File(args[0]).getAbsoluteFile();
String resourceType = "Encounter";
System.out.println(navigateDirectoriesAndFindTheFile(resourceType, path));
}
public static File navigateDirectoriesAndFindTheFile(String inputResourceString, File path) {
File[] files = path.listFiles();
File found = null;
for (int i = 0; found == null && files != null && i < files.length; i++) {
File file = files[i];
if (file.isDirectory()) {
found = navigateDirectoriesAndFindTheFile(inputResourceString, file);
} else if (file.getName().startsWith(inputResourceString) && file.getParentFile().getName().equals(inputResourceString)) {
found = file;
}
}
return found;
}
}
公共类ConfigReader
{
公共静态void main(字符串[]args)引发异常{
系统输出打印LN(“打印L”);
文件路径=新文件(args[0])。getAbsoluteFile();
字符串resourceType=“遭遇”;
System.out.println(NavigateDirectory和FindTheFile(resourceType,path));
}
公共静态文件导航目录并查找文件(字符串输入资源目录,文件路径){
File[]files=path.listFiles();
找到的文件=null;
for(int i=0;found==null&&files!=null&&i
如果这是缓慢的,特别是对于1K个文件,使用
文件重新写入。walkFileTree
,这将比递归中的文件.list()
快得多。是的,这解决了我的问题,我接受了你的答案。另外,正如问题的标题所说,是否有任何方法可以将整个资源文件夹加载到内存中,以便下次需要读取某个文件时,我只需从缓存中选取它。你能给我推荐一些链接或者一些概念吗?我是Java新手,我添加了一个NIO文件扫描的例子来寻找另一个答案。请参阅下面我的答案中的ExampleFileVisitor.scan()
方法[。它将返回属性信息的路径图,但很容易适应存储找到的文件的任何详细信息。是的,非常感谢,伙计。我知道我错在哪里了。此外,我将浏览你的链接。你让我开心:)