Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据java中传递的关键字和内存加载方法查找特定目录及其文件_Java_File - Fatal编程技术网

如何根据java中传递的关键字和内存加载方法查找特定目录及其文件

如何根据java中传递的关键字和内存加载方法查找特定目录及其文件,java,file,Java,File,我的项目结构如下: 现在,我的问题是我必须迭代resources文件夹,并且给定一个键,我必须找到该特定文件夹及其文件。 为此,我使用递归方法编写了以下代码,但我没有得到预期的输出: public class ConfigFileReader { public static void main(String[] args) throws Exception { System.out.println("Print L"); String

我的项目结构如下:

现在,我的问题是我必须迭代resources文件夹,并且给定一个键,我必须找到该特定文件夹及其文件。
为此,我使用递归方法编写了以下代码,但我没有得到预期的输出:

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()
方法[。它将返回属性信息的路径图,但很容易适应存储找到的文件的任何详细信息。是的,非常感谢,伙计。我知道我错在哪里了。此外,我将浏览你的链接。你让我开心:)